start-stop-daemonでのstdout / stderrリダイレクト


8

init私のデーモンの出力を2つのファイル(stdoutとstderr)にリダイレクトする構成を記述しようとしています。問題は、機能していないことです。私はこれを今読んでいます。

そこで、このシェルスクリプトを実行して、このアプローチをテストしました。そしてそれはうまくいきません:

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

しかし、別のシェルでデーモンをラップせずにこれを開始すると、意図したとおりに機能します(stderr / stdoutリダイレクトなしで)。

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

問題は、なぜ最初のスクリプトが機能しないのか、です。システムはDebian Lenny、start-stop-daemonバージョンは1.14.29です。

回答:


4

展開の順序のため、変数にリダイレクトを渡すことはできません。リダイレクトは、単語分割の前に評価されます。

BashFAQ / 050Shell Expansions and Redirectionsを参照してください。


はい、なので最後の2行を次のように置き換えてください: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

ノードストリームまたはをリダイレクトしますstart-stop-daemonか?
黒木風

1
@Kurokiと@BMDan:はの出力をリダイレクトしますstart-stop-daemon
追って通知があるまで一時停止。

2
デーモン出力のみをリッスンする方法(shラッパーの他のもの)?
黒木風

1

スクリプトの行は次のとおりです。

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

だからあなたは基本的に引数として$DAEMON使用$NCMDして実行することを言っています。に変更$NCMDしてみてください

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

それが機能するかどうかを確認します。

そうでない場合は、ソフトウェアをリダイレクトstdoutstderrてファイルに変更する必要があります(おそらく、すでにログオプションがあります)。リダイレクトを行うためだけにラッパースクリプトを記述することもできますが、これは少し醜い面です。


1

nohupを使用してストリームをリダイレクトする別の方法:

nohup ./bin/servicemix ./conf/servicemix.xml > log/nohup.log 2>&1 &
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.