Назад | Перейти на главную страницу

Stdout / stderr перенаправляет в start-stop-daemon

Я пытаюсь написать init config, который перенаправит вывод моего демона в два файла (для stdout и stderr). Проблема в том, что он не работает. я читаю этот сейчас.

Итак, я сделал этот сценарий оболочки, чтобы проверить этот подход. И это не работает:

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Seed kurokikaze starter"
#NAME=node
DAEMON="/etc/node-version/0.1.99/bin/node"
DAEMON_ARGS="/etc/seed/kurokikaze/server.js"
DAEMON_DIR="/etc/seed/kurokikaze"

APPLOG_FILE="/var/log/seed/kurokikaze"
ERRLOG_FILE="/var/log/seed/kurokikaze-err"

PIDFILE="/var/run/seeds/kurokikaze.pid"
SCRIPTNAME="/etc/seed-init/kurokikaze"

NCMD="exec $DAEMON $DAEMON_ARGS 1>>$APPLOG_FILE 2>>$ERRLOG_FILE"

start-stop-daemon -Sbmv --pidfile $PIDFILE --chdir ${DAEMON_DIR} --exec $DAEMON --startas /bin/sh -- $NCMD

Но если вы запустите это без обертывания демона в отдельной оболочке, он будет работать как задумано (только без перенаправления stderr / stdout):

start-stop-daemon -Sbmv --pidfile $PIDFILE --chdir ${DAEMON_DIR} --exec $DAEMON -- ${DAEMON_ARGS}

Возникает вопрос: почему не работает первый скрипт? Система - Debian Lenny, start-stop-daemon версия 1.14.29

Из-за порядка расширения вы не можете передавать перенаправления в переменных. Перенаправление оценивается перед разделением слов.

Видеть BashFAQ / 050, Расширения Shell и Перенаправления.

Ваша строка в сценарии:

start-stop-daemon -Sbmv --pidfile $PIDFILE --chdir ${DAEMON_DIR} --exec $DAEMON --startas /bin/sh -- $NCMD

Итак, вы в основном говорите exec $DAEMON с помощью $NCMD как аргументы. Попробуй изменить $NCMD к

"$DAEMON_ARGS 1>>$APPLOG_FILE 2>>$ERRLOG_FILE"

и посмотрите, работает ли это.

Если нет, вам придется изменить свое программное обеспечение для перенаправления stdout и stderr в файлы (возможно, в нем уже есть возможность ведения журнала). Вы также можете написать обертка script просто для перенаправления, но это немного неприятно.

Другой способ перенаправления потоков - использование нету лайк:

nohup ./bin/servicemix ./conf/servicemix.xml > log/nohup.log 2>&1 &