Stdout / stderr reindirizza in demone start-stop


8

Sto cercando di scrivere una initconfigurazione che reindirizzerà l'output del mio demone su due file (per stdout e stderr). Il problema è che non funziona. Sto leggendo questo proprio ora.

Quindi, ho fatto questo script di shell per testare questo approccio. E non funziona:

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

Ma se si avvia questo senza avvolgere il demone in una shell separata, funziona come previsto (solo senza reindirizzamenti stderr / stdout):

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

La domanda è: perché il primo script non funziona? Il sistema è Debian Lenny, la start-stop-daemonversione è 1.14.29

Risposte:


4

A causa dell'ordine di espansione, non è possibile passare i reindirizzamenti nelle variabili. Il reindirizzamento viene valutato prima della suddivisione delle parole.

Vedi BashFAQ / 050 , Espansioni e reindirizzamenti della shell .


Sì, quindi basta sostituire le ultime due righe con: NCMD = "exec $ DAEMON $ DAEMON_ARGS"; start-stop-daemon -Sbmv --pidfile $ PIDFILE --chdir $ {DAEMON_DIR} --exec $ DAEMON --startas / bin / sh - $ NCMD 1 >> $ APPLOG_FILE 2 >> $ ERRLOG_FILE
BMDan

Reindirizzerà i flussi di nodi o start-stop-daemondi?
Kuroki Kaze,

1
@Kuroki e @BMDan: reindirizzerà l'output di start-stop-daemon.
In pausa fino a nuovo avviso.

2
Un modo per ascoltare solo l'output del demone (altro di sh wrapper)?
Kuroki Kaze,

1

La tua linea nello script è:

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

Quindi sostanzialmente stai dicendo di exec $DAEMONusando $NCMDcome args. Prova a passare $NCMDa

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

e vedere se funziona.

In caso contrario, dovrai cambiare il tuo software per reindirizzare stdoute stderrverso i file (forse ha già un'opzione di registrazione). Puoi anche scrivere uno script wrapper solo per fare il reindirizzamento, ma è un po 'brutto.


1

Un altro modo per reindirizzare i flussi utilizzando nohup come:

nohup ./bin/servicemix ./conf/servicemix.xml > log/nohup.log 2>&1 &
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.