PHP和错误“启动 - 停止守护进程:无法统计”
我有一个守护程序,我已经创建使用PHP。我想通过initscripts调用它,并在启动时启动,这很好。然而,当我试图杀死使用的进程PHP和错误“启动 - 停止守护进程:无法统计”
sudo service crystal_send stop
它不杀死进程。
而当我把这个直接
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile /var/run/crystal/crystal_send.pid --exec /bin/crystal_send
我得到
start-stop-daemon: unable to stat /bin/crystal_send (No such file or directory)
这里是我的/etc/init.d/crystal_send do_stop功能的模样。
## /etc/init.d/crystal_send
NAME=crystal_send
DAEMON=/bin/$NAME
PIDFILE=/var/run/crystal/$NAME.pid
....
do_stop()
{
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DAEMON
RETVAL="$?"
rm -f $PIDFILE
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
rm -f $PIDFILE
return "$RETVAL"
}
看着dostrander的代码后,我的代码,我再次认识到,在两种情况下会如果调用start-stop-daemon的是pidfile进程文件或锁文件被删除成功的。在调用start-stop-daemon之前删除它们可能会更好。但是在检查PID是否正确之后。
if [ $(sed -n '1p' < $PIDFILE) == $(pidof -x $NAME) ]; then
rm -f $PIDFILE
rm -f $LOCKFILE
fi
start-stop-daemon -K -q --retry=TERM/30/KILL/5 -n $NAME
RETVAL="$?"
printf "RETVAL is $RETVAL.\n"
[ "$RETVAL" = 4 ] && return 4
那么就来了解一下这个问题已经做的起止守护--stop,特别是--exec $DAEMON
部分是不是我应该一直在使用,我应该是使用--name $NAME
。 这是因为--exec正在寻找一个命令,守护进程是用php(一种解释语言)编写的,因此它实际上调用了php,然后调用我的php程序(crystal_send),并且由于start-stop-daemon正在寻找一个命令/bin/crystal_send
而不是/bin/php /bin/crystal_send
它不会找到它。
因此,您应该在进程表中使用start-stop-daemon查找名称,这是我在使用--name $ NAME时所执行的操作。
所以我最终do_stop功能看起来像这样
## /etc/init.d/crystal_send
NAME=crystal_send
DAEMON=/bin/$NAME
PIDFILE=/var/run/crystal/$NAME.pid
....
do_stop()
{
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
rm -f $PIDFILE
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --name $NAME
[ "$?" = 2 ] && return 2
rm -f $PIDFILE
return "$RETVAL"
}
dostrander,
感谢这个poisting。它帮助我解决了我遇到的一些问题。但我不知道是否
do_stop()
{
启动 - 停止 - 守护--stop --quiet --retry = TERM/30/KILL/5 --pidfile $ PIDFILE --name $ NAME
RETVAL = “$?” RM -f $ PIDFILE [ “$ RETVAL”= 4] & &回报4
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --name $NAME
[ "$?" = 4 ] && return 4
rm -f $PIDFILE
rm -f /var/lock/$NAME
return "$RETVAL"
}
会更好?
并不2意味着该计划是死的和/ var /锁锁文件存在
我也不能在/ lib/LSB /初始化函数任何地方,killproc()将返回2
找到而一个4指程序或服务的状态未知