Как найти сообщения об ошибках из скриптов 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?

Заранее спасибо.

McKAMEY
источник
Если вы перейдете к более современному дистрибутиву с systemd, он справится с этим для вас и позволит вести журнал сообщений каждого сервиса.
Eckes

Ответы:

17
  1. Нет - они идут в STDOUT (если вы используете echo) или STDERR (если вы используете echo >&2).

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

Если вы идете за журналами, ищите teeкоманду. Если вы идете на системный журнал, посмотрите на logger. Вы можете комбинировать их так, как хотите.

Nils
источник
9

Напишите скрипт-обертку, который вызывает ваш скрипт и перенаправляет вывод в файлы

#!/bin/bash

    /path/to/your/script &>/path/to/logfile
user9517 поддерживает GoFundMonica
источник
6

Вы можете сделать функцию для вывода сообщения на экран и в системный журнал, что-то вроде этого:

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
ott--
источник
Спасибо, это ближе к тому, что я искал. Я знаю, как перенаправить ввод / вывод, но я не знал, как позвонить в регистратор.
McKAMEY
Является ли [ -r ... ]тест , чтобы проверить , если он существует?
McKAMEY
Да, проверьте, доступен ли файл для чтения.
ot--
5

Сообщения из сценариев инициализации, как правило, нигде не записываются. Таким образом, вам нужно реализовать способ сделать это самостоятельно. Хорошая идея - использовать loggerдля отправки всего вывода в системный журнал. Этот пример отправит stdout и stderr в системный журнал:

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

Я нашел это в этой замечательной статье: http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/ .

qugu
источник