Jak znaleźć komunikaty o błędach ze skryptów init.d / rc.d dla systemu Linux?

28

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.di /etc/rc.d/rc?.dpołą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/messagesi przeszukałem resztę, /var/logale nie mogę znaleźć nic przydatnego.

Czy ktoś wie:

  1. czy te komunikaty o błędach są gdzieś automatycznie przechwytywane?
  2. jeśli nie, jak mogę przechwycić stdout / stderr ze skryptu init.d?

Z góry dziękuję.

McKAMEY
źródło
Jeśli przejdziesz do bardziej nowoczesnej dystrybucji z systemd, zajmie się tym za Ciebie i pozwoli na zapisywanie dzienników komunikatów każdej usługi.
eckes

Odpowiedzi:

17
  1. Nie - przechodzą do STDOUT (jeśli używasz echo) lub STDERR (jeśli używasz echo >&2).

  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 teepolecenia. Jeśli wybierzesz syslog, spójrz na logger. Możesz łączyć je w dowolny sposób.

Nils
źródło
9

Napisz skrypt otoki, który wywołuje twój skrypt i przekierowuje dane wyjściowe do plików

#!/bin/bash

    /path/to/your/script &>/path/to/logfile
user9517 obsługuje GoFundMonica
źródło
6

Możesz wykonać funkcję, aby wysłać wiadomość na ekran i do syslog, coś takiego:

LOGGER="/usr/bin/logger -t $myScript"    # check the location of logger for your system

myEcho () {
    echo "$1"
    $LOGGER "$1"
}

Możesz także umieścić to w osobnym pliku i dołączyć do swoich skryptów

#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho
ott--
źródło
Dzięki, to jest bliższe tego, czego szukałem. Wiem, jak przekierować We / Wy, ale nie wiedziałem, jak zadzwonić do rejestratora.
McKAMEY,
Czy [ -r ... ]test sprawdza, czy istnieje?
McKAMEY,
Tak, sprawdź, czy plik jest czytelny.
ott--
5

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 loggerprzesłanie wszystkich danych wyjściowych do syslog. Ten przykład wyśle ​​stdout i stderr do syslog:

exec 1> >(logger -s -t $(basename $0)) 2>&1

Znalazłem go w tym świetnym artykule: http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/ .

qugu
źródło