从启动 - 停止守护进程调用的php脚本记录错误输出
问题描述:
我正在测试通过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
。
为什么脚本输出没有被记录到指定的日志文件?
答
为什么脚本输出没有被记录到指定的日志文件?
当脚本被作为后台进程运行,它将从标准流(标准输入,输出和错误)去耦。与"How can I log the stdout of a process started by start-stop-daemon?"比较。
您使用标准流进行日志记录,在这种情况下不可用。
对于deamon,我建议你直接登录日志文件而不是stderr。
您不需要为此更改大部分脚本,只需在调用脚本时删除重定向,并在脚本顶部将error_log
directive设置为错误日志文件名。