W Linuksie napisałem kilka skryptów do uruchomienia podczas rozruchu i bawiłem się różnymi sposobami ich instalowania. W przypadku większych skryptów wstawię /etc/init.d
i /etc/rc.d/rc?.d
połączę odpowiednie poziomy działania. W przypadku mniejszych skryptów dołączę się do /etc/rc.d/rc.local
. Wydaje się, że proces ten przebiega sprawnie.
Teraz poprawiłem jeden z moich skryptów i nie działa. Trochę czasu zdiagnozowałem, ponieważ nie mogę uchwycić wyjścia błędu. Sprawdziłem /var/log/messages
i przeszukałem resztę, /var/log
ale nie mogę znaleźć nic przydatnego.
Czy ktoś wie:
- czy te komunikaty o błędach są gdzieś automatycznie przechwytywane?
- jeśli nie, jak mogę przechwycić stdout / stderr ze skryptu init.d?
Z góry dziękuję.
Odpowiedzi:
Nie - przechodzą do STDOUT (jeśli używasz
echo
) lub STDERR (jeśli używaszecho >&2
).Twoje skrypty muszą same pisać w logach i / lub syslog (Twoja dystrybucja może zawierać funkcje init.d, które mogą w tym pomóc - dodaj swoją dystrybucję do pytania).
Jeśli szukasz dzienników, poszukaj
tee
polecenia. Jeśli wybierzesz syslog, spójrz nalogger
. Możesz łączyć je w dowolny sposób.źródło
Napisz skrypt otoki, który wywołuje twój skrypt i przekierowuje dane wyjściowe do plików
źródło
Możesz wykonać funkcję, aby wysłać wiadomość na ekran i do syslog, coś takiego:
Możesz także umieścić to w osobnym pliku i dołączyć do swoich skryptów
źródło
[ -r ... ]
test sprawdza, czy istnieje?Wiadomości ze skryptów inicjujących na ogół nigdzie nie są przechwytywane. Dlatego musisz wdrożyć sposób, aby to zrobić samemu. Dobrym pomysłem jest
logger
przesłanie wszystkich danych wyjściowych do syslog. Ten przykład wyśle stdout i stderr do syslog:Znalazłem go w tym świetnym artykule: http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/ .
źródło