Stdout / stderr redirige en start-stop-daemon

8

Estoy tratando de escribir una initconfiguración que redirija la salida de mi daemon a dos archivos (para stdout y stderr). El problema es que no está funcionando. Estoy leyendo esto ahora mismo.

Entonces, hice este script de shell para probar este enfoque. Y no 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

Pero si comienzas esto sin envolver el demonio en un shell separado, funciona según lo previsto (solo sin redireccionamientos stderr / stdout):

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

La pregunta es: ¿por qué el primer script no funciona? El sistema es Debian Lenny, la start-stop-daemonversión es 1.14.29

Kuroki Kaze
fuente

Respuestas:

4

Debido al orden de expansión, no puede pasar redirecciones en las variables. La redirección se evalúa antes de la división de palabras.

Ver BashFAQ / 050 , Expansiones de Shell y redirecciones .

Pausado hasta nuevo aviso.
fuente
Sí, entonces reemplace las dos últimas líneas 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
¿Redirigirá las secuencias de nodo o start-stop-daemon's?
Kuroki Kaze
1
@Kuroki y @BMDan: Eso redirigirá la salida de start-stop-daemon.
Pausado hasta nuevo aviso.
2
¿Alguna forma de escuchar solo la salida de daemon (otra de sh wrapper)?
Kuroki Kaze
1

Su línea en el guión es:

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

Así que básicamente le estás diciendo a exec que $DAEMONuse $NCMDcomo args. Intenta cambiar $NCMDa

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

y ver si funciona.

Si no, tendrá que cambiar su software para redirigir stdouty stderra los archivos (tal vez ya tenga una opción de registro). También puede escribir un script de contenedor solo para hacer la redirección, pero eso es un poco feo.

volcado de memoria
fuente
1

Otra forma de redireccionar las transmisiones usando nohup como:

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