Як знайти повідомлення про помилки зі скриптів Linux init.d / rc.d?


28

В Linux я написав кілька сценаріїв, які потрібно виконати під час завантаження, і розігрувався з різними способами їх встановлення. Для великих сценаріїв я вставлю /etc/init.dі пов'язую відповідні /etc/rc.d/rc?.dрівні запуску. Для менших сценаріїв я додам /etc/rc.d/rc.local. Цей процес, здається, працює безперебійно.

Тепер я підробив один зі своїх сценаріїв, і він не працює. Я маю напевно час діагностувати це, тому що я, здається, не можу отримати дані про помилку. Я перевірив /var/log/messagesі ткнув навколо решти, /var/logале не можу знайти нічого корисного.

Хтось знає:

  1. ці повідомлення про помилки десь фіксуються десь?
  2. якщо ні, то як я можу захопити stdout / stderr зі своїх скриптів init.d?

Заздалегідь спасибі.



Якщо ви перейдете до більш сучасного дистрибутиву з системою systemd, він обробляє це для вас і дозволить вести журнал журналів повідомлень кожної служби.
eckes

Відповіді:


17
  1. Ні - вони переходять до STDOUT (якщо ви використовуєте echo) або STDERR (якщо ви використовуєте echo >&2).

  2. Ваші сценарії повинні самостійно писати в журнали та / або syslog (ваш дистрибутив може містити деякі функції init.d, які можуть там допомогти - додайте розповсюдження до свого питання).

Якщо ви ходите за журналами, шукайте teeкоманду. Якщо ви підете на syslog, подивіться logger. Ви можете комбінувати їх будь-яким способом.



6

Ви можете зробити функцію, щоб повторювати повідомлення як на екрані, так і в syslog, приблизно так:

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

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

Ви також можете помістити це в окремий файл і включити його до своїх сценаріїв

#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho

Дякую, це ближче до того, що я шукав. Я знаю, як перенаправляти введення-виведення, але не знав, як зателефонувати в реєстратор.
McKAMEY

Чи [ -r ... ]є тест, щоб перевірити, чи існує?
McKAMEY

Так, перевірте, чи файл читабельний.
ott--

5

Повідомлення з сценаріїв init, як правило, нікуди не фіксуються. Таким чином, вам потрібно реалізувати спосіб зробити це самостійно. Хорошою ідеєю є використання loggerдля відправки всього виводу в syslog. Цей приклад відправить stdout та stderr у syslog:

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

Я знайшов це у цій чудовій статті: http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/ .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.