Stdout / stderr redireciona no daemon start-stop

9

Estou tentando escrever init config que redirecionará a saída do meu daemon para dois arquivos (para stdout e stderr). O problema é que não está funcionando. Estou lendo este agora mesmo.

Então, eu fiz este script de shell para testar essa abordagem. E isso não funciona:

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

Mas se você iniciar isto sem envolver o daemon no shell separado, ele funcionará como planejado (apenas sem redirecionamentos stderr / stdout):

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

A pergunta é: por que o primeiro script não funciona? O sistema é Debian Lenny, start-stop-daemon versão é 1.14.29

    
por Kuroki Kaze 21.07.2010 / 14:11

3 respostas

5

Por causa da ordem de expansão, você não pode passar redirecionamentos em variáveis. O redirecionamento é avaliado antes da divisão de palavras.

Veja BashFAQ / 050 , Expansões do shell e Redirecionamentos .

    
por 21.07.2010 / 15:42
1

Sua linha no script é:

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

Então você está basicamente dizendo para exec $DAEMON usando $NCMD as args. Tente alterar $NCMD para

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

e veja se funciona.

Se não, você terá que alterar seu software para redirecionar stdout e stderr para arquivos (talvez ele já tenha uma opção de registro). Você também pode escrever um script wrapper apenas para fazer o redirecionamento, mas isso é um pouco feio.

    
por 21.07.2010 / 15:04
1

Outra forma de redirecionamento de fluxos usando nohup é o seguinte:

nohup ./bin/servicemix ./conf/servicemix.xml > log/nohup.log 2>&1 &
    
por 08.12.2011 / 14:50

Tags