В Linux я написал несколько сценариев для выполнения во время загрузки и поигрался с различными способами их установки. Для больших скриптов я добавлю /etc/init.d
и свяжите соответствующий /etc/rc.d/rc?.d
уровни выполнения. Для небольших скриптов я добавлю /etc/rc.d/rc.local
. Кажется, этот процесс идет гладко.
Я настроил один из своих скриптов, но он не работает. У меня чертовски много времени на его диагностику, потому что я не могу зафиксировать вывод ошибки. Я проверил /var/log/messages
и ковырялся в остальной части /var/log
но не могу найти ничего полезного.
Кто-нибудь знает:
Заранее спасибо.
Нет - они идут в STDOUT (если вы используете echo
) или STDERR (если вы используете echo >&2
).
Ваши скрипты должны записывать в журналы и / или системные журналы самостоятельно (ваш дистрибутив может содержать некоторые init.d функции, которые могут там помочь - добавьте свой дистрибутив в свой вопрос).
Если вы идете за журналами, ищите tee
команда. Если вы зайдете в системный журнал, посмотрите logger
. Вы можете комбинировать их как хотите.
Напишите сценарий оболочки, который вызывает ваш сценарий и перенаправляет вывод в файлы.
#!/bin/bash
/path/to/your/script &>/path/to/logfile
Сообщения из сценариев инициализации, как правило, нигде не записываются. Таким образом, вам нужно реализовать способ сделать это самостоятельно. Хорошая идея - использовать logger
отправлять весь вывод в системный журнал. Этот пример отправит 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/.
Вы можете создать функцию для вывода сообщения на экран и в системный журнал, примерно так:
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