Stdout/stderr 在 start-stop-daemon 中重定向

Kur*_*aze 8 debian bash

我正在尝试编写init配置,将我的守护进程的输出重定向到两个文件(对于 stdout 和 stderr)。问题是,它不起作用。我现在正在读这个

所以,我已经完成了这个 shell 脚本来测试这种方法。它不起作用:

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
Run Code Online (Sandbox Code Playgroud)

但是,如果您在没有将守护程序包装在单独的 shell 中的情况下启动它,它会按预期工作(只是没有 stderr/stdout 重定向):

start-stop-daemon -Sbmv --pidfile $PIDFILE --chdir ${DAEMON_DIR} --exec $DAEMON -- ${DAEMON_ARGS}
Run Code Online (Sandbox Code Playgroud)

问题是:为什么第一个脚本不起作用?系统是Debian Lenny,start-stop-daemon版本是1.14.29

Den*_*son 4

由于扩展顺序的原因,您无法在变量中传递重定向。重定向在分词之前进行评估。

请参阅BashFAQ/050Shell 扩展重定向

  • 有什么办法只监听守护进程输出(sh 包装器的其他输出)? (2认同)