2017-06-18 60 views
0

我正在測試通過Ubuntu上啓動 - 停止守護進程運行的簡單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

爲什麼腳本輸出沒有被記錄到指定的日誌文件?

當腳本被作爲後臺進程運行,它將從標準流(標準輸入,輸出和錯誤)去耦。與"How can I log the stdout of a process started by start-stop-daemon?"比較。

您使用標準流進行日誌記錄,在這種情況下不可用。

對於deamon,我建議你直接登錄日誌文件而不是stderr。

您不需要爲此更改大部分腳本,只需在調用腳本時刪除重定向,並在腳本頂部將error_log directive設置爲錯誤日誌文件名。

相關問題