2017-06-18 19 views
0

私は、Ubuntuでstart-stopデーモンを介して実行されている簡単なPHPスクリプトの出力を記録してテストしています。開始ストップデーモンから呼び出されたPHPスクリプトからのログ出力エラー

テストスクリプトの内容、loop.php、以下の通りである:

<?php 

while (true) { 
    error_log('Running at '.date('Y-m-d H:i:s').'...'); 
    sleep(10); 
} 

コマンドラインから実行するとき/tmp/loop.logに予想されるように、出力が記録されている:

php loop.php >> /tmp/loop.log 2>&1

期待どおりに動作しますが、今はstart-stop-demonでスクリプトを実行します。

私はそれを設定するためのテンプレートとしてexample scriptを使用しています

#! /bin/sh 

# Installation 
# - Move this to /etc/init.d/myservice 
# - chmod +x this 
# 
# Starting and stopping 
# - Start: `service myservice start` or `/etc/init.d/myservice start` 
# - Stop: `service myservice stop` or `/etc/init.d/myservice stop` 

#ref http://till.klampaeckel.de/blog/archives/94-start-stop-daemon,-Gearman-and-a-little-PHP.html 
#ref http://unix.stackexchange.com/questions/85033/use-start-stop-daemon-for-a-php-server/85570#85570 
#ref http://serverfault.com/questions/229759/launching-a-php-daemon-from-an-lsb-init-script-w-start-stop-daemon 

NAME=myservice 
DESC="MyService PHP CLI script daemon" 
PIDFILE="/var/run/${NAME}.pid" 
LOGFILE="/var/log/${NAME}.log" 

DAEMON="/usr/bin/php" 
DAEMON_OPTS="/home/me/loop.php" 

START_OPTS="--start --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} ${DAEMON_OPTS}" 
STOP_OPTS="--stop --pidfile ${PIDFILE}" 

test -x $DAEMON || exit 0 

set -e 

case "$1" in 
    start) 
     echo -n "Starting ${DESC}: " 
     start-stop-daemon $START_OPTS >> $LOGFILE 2>&1 
     echo "$NAME." 
     ;; 
    stop) 
     echo -n "Stopping $DESC: " 
     start-stop-daemon $STOP_OPTS 
     echo "$NAME." 
     rm -f $PIDFILE 
     ;; 
    restart|force-reload) 
     echo -n "Restarting $DESC: " 
     start-stop-daemon $STOP_OPTS 
     sleep 1 
     start-stop-daemon $START_OPTS >> $LOGFILE 2>&1 
     echo "$NAME." 
     ;; 
    *) 
     N=/etc/init.d/$NAME 
     echo "Usage: $N {start|stop|restart|force-reload}" >&2 
     exit 1 
     ;; 
esac 

exit 0 

私は開始および停止デーモンをし、すべてが期待どおりに動作することができ、しかし何も/var/log/myservice.logに書き込まれませんされます。

スクリプト出力が指定されたログファイルに記録されないのはなぜですか?

答えて

1

なぜスクリプト出力が指定されたログファイルに記録されないのですか?

スクリプトがデーモンとして実行される場合、それは標準ストリーム(STDIN、stdoutとstderr)から分離されます。 "How can I log the stdout of a process started by start-stop-daemon?"と比較してください。

この場合には使用できないログ用の標準ストリームを使用します。

デーモンの代わりに、stderrではなくログファイルに直接ログオンすることをお勧めします。

スクリプトの多くを変更する必要はありません。スクリプトを呼び出すときにリダイレクトを削除するだけで、スクリプトの先頭にerror_log directiveをエラーログファイル名に設定します。

関連する問題