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

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 .


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.


1

Otra forma de redireccionar las transmisiones usando nohup como:

nohup ./bin/servicemix ./conf/servicemix.xml > log/nohup.log 2>&1 &
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.