Redirection Stdout / stderr dans le démon start-stop

8

J'essaie d'écrire une initconfiguration qui redirigera la sortie de mon démon vers deux fichiers (pour stdout et stderr). Le problème est que cela ne fonctionne pas. Je lis ça maintenant.

J'ai donc fait ce script shell pour tester cette approche. Et ça ne marche pas:

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

Mais si vous démarrez cela sans envelopper le démon dans un shell séparé, cela fonctionne comme prévu (juste sans les redirections stderr / stdout):

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

La question est: pourquoi le premier script ne fonctionne pas? Le système est Debian Lenny, la start-stop-daemonversion est 1.14.29

Kuroki Kaze
la source

Réponses:

4

En raison de l'ordre d'expansion, vous ne pouvez pas transmettre de redirections dans les variables. La redirection est évaluée avant la séparation des mots.

Voir BashFAQ / 050 , Expansions et redirections du shell .

En pause jusqu'à nouvel ordre.
la source
Oui, il suffit donc de remplacer les deux dernières lignes par: 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
Va-t-il rediriger les flux ou start-stop-daemonles nœuds ?
Kuroki Kaze
1
@Kuroki et @BMDan: Cela redirigera la sortie de start-stop-daemon.
pause jusqu'à nouvel ordre.
2
Est-il possible d'écouter uniquement la sortie du démon (autre que sh wrapper)?
Kuroki Kaze du
1

Votre ligne dans le script est:

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

Donc, vous dites essentiellement à exec d' $DAEMONutiliser $NCMDcomme arguments. Essayez de changer $NCMDpour

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

et voyez si cela fonctionne.

Sinon, vous devrez changer votre logiciel pour rediriger stdoutet stderrvers les fichiers (peut-être qu'il a déjà une option de journalisation). Vous pouvez également écrire un script wrapper juste pour faire la redirection, mais c'est un peu laid.

coredump
la source
1

Une autre façon de rediriger les flux en utilisant nohup comme:

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