Php 作为守护进程的脚本
Php script as daemon
我是 php 守护进程的新手。我正在使用下面的脚本来触发 Daemon.php 脚本。但是我在通过 shell
在 bash 脚本下面执行时出错
错误是,
exit: 0RETVAL=0: numeric argument required
请帮我解决这个错误
#!/bin/bash
#
# /etc/init.d/Daemon
#
# Starts the at daemon
#
# chkconfig: 345 95 5
# description: Runs the demonstration daemon.
# processname: Daemon
# Source function library.
#. /etc/init.d/functions
#startup values
log=/var/log/Daemon.log
#verify that the executable exists
test -x /home/godlikemouse/Daemon.php || exit 0RETVAL=0
#
# Set prog, proc and bin variables.
#
prog="Daemon"
proc=/var/lock/subsys/Daemon
bin=/home/godlikemouse/Daemon.php
start() {
# Check if Daemon is already running
if [ ! -f $proc ]; then
echo -n $"Starting $prog: "
daemon $bin --log=$log
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $proc
echo
fi
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc $bin
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f $proc
echo
return $RETVAL
}
restart() {
stop
start
}
reload() {
restart
}
status_at() {
status $bin
}
case "" in
start)
start
;;
stop)
stop
;;
reload|restart)
restart
;;
condrestart)
if [ -f $proc ]; then
restart
fi
;;
status)
status_at
;;
*)
echo $"Usage: [=12=] {start|stop|restart|condrestart|status}"
exit 1
esac
exit $?
exit $RETVAL
此行产生错误:
test -x /home/godlikemouse/Daemon.php || exit 0RETVAL=0
如果您想将 RETVAL
的值设置为 0,您首先需要删除 0,因为您不能拥有以数字开头的变量。
然后从第二条语句中删除值集,以便在 Daemon.php 不存在的情况下退出。
test -x /home/godlikemouse/Daemon.php || exit
您还可以删除启动和停止函数中的 2 个空 echo 语句,因为什么都不做。
case语句也有错误。您需要引用大小写选项,并且可以删除最后一个退出块,因为 exit $?
将在之前触发退出。
case "" in
"start")
start
;;
"stop")
stop
;;
"reload"|"restart")
restart
;;
"condrestart")
if [ -f $proc ]; then
restart
fi
;;
"status")
status_at
;;
此脚本中存在多个语法和逻辑错误。突出几个:
echo $"Usage
(应该只是 echo "Usage ..."
因为“..”中的字符串不是变量
- 双重退出语句,
$RETVAL
的第二个语句永远不会是 运行.
exit 0RETVAL
与 exit $RETVAL
不同,应该只使用 exit 1
来表示错误,exit 0
表示脚本 运行 正确
$prog
已定义但从未使用过
test -x
是检查给定路径中启用的可执行位。 test -f
测试文件时更安全,test -d
测试目录更安全,test -L
测试符号链接时更安全。结合 test -f
和 test -x
以确保没有竞争条件或最坏情况。 (示例:(test -f /home/godlikemouse/Daemon.php && test -x /home/godlikemouse/Daemon.php) || exit 1)
)
有关创建 sysv init 脚本的更多详细信息,请参阅 http://refspecs.linuxbase.org/LSB_3.0.0/LSB-generic/LSB-generic/iniscrptact.html and bash scripting can be read at http://www.tldp.org/LDP/abs/html/index.html。强烈建议在编写系统控制程序(如 init 脚本)之前学习两者。
我是 php 守护进程的新手。我正在使用下面的脚本来触发 Daemon.php 脚本。但是我在通过 shell
在 bash 脚本下面执行时出错错误是,
exit: 0RETVAL=0: numeric argument required
请帮我解决这个错误
#!/bin/bash
#
# /etc/init.d/Daemon
#
# Starts the at daemon
#
# chkconfig: 345 95 5
# description: Runs the demonstration daemon.
# processname: Daemon
# Source function library.
#. /etc/init.d/functions
#startup values
log=/var/log/Daemon.log
#verify that the executable exists
test -x /home/godlikemouse/Daemon.php || exit 0RETVAL=0
#
# Set prog, proc and bin variables.
#
prog="Daemon"
proc=/var/lock/subsys/Daemon
bin=/home/godlikemouse/Daemon.php
start() {
# Check if Daemon is already running
if [ ! -f $proc ]; then
echo -n $"Starting $prog: "
daemon $bin --log=$log
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $proc
echo
fi
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc $bin
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f $proc
echo
return $RETVAL
}
restart() {
stop
start
}
reload() {
restart
}
status_at() {
status $bin
}
case "" in
start)
start
;;
stop)
stop
;;
reload|restart)
restart
;;
condrestart)
if [ -f $proc ]; then
restart
fi
;;
status)
status_at
;;
*)
echo $"Usage: [=12=] {start|stop|restart|condrestart|status}"
exit 1
esac
exit $?
exit $RETVAL
此行产生错误:
test -x /home/godlikemouse/Daemon.php || exit 0RETVAL=0
如果您想将 RETVAL
的值设置为 0,您首先需要删除 0,因为您不能拥有以数字开头的变量。
然后从第二条语句中删除值集,以便在 Daemon.php 不存在的情况下退出。
test -x /home/godlikemouse/Daemon.php || exit
您还可以删除启动和停止函数中的 2 个空 echo 语句,因为什么都不做。
case语句也有错误。您需要引用大小写选项,并且可以删除最后一个退出块,因为 exit $?
将在之前触发退出。
case "" in
"start")
start
;;
"stop")
stop
;;
"reload"|"restart")
restart
;;
"condrestart")
if [ -f $proc ]; then
restart
fi
;;
"status")
status_at
;;
此脚本中存在多个语法和逻辑错误。突出几个:
echo $"Usage
(应该只是echo "Usage ..."
因为“..”中的字符串不是变量- 双重退出语句,
$RETVAL
的第二个语句永远不会是 运行. exit 0RETVAL
与exit $RETVAL
不同,应该只使用exit 1
来表示错误,exit 0
表示脚本 运行 正确$prog
已定义但从未使用过test -x
是检查给定路径中启用的可执行位。test -f
测试文件时更安全,test -d
测试目录更安全,test -L
测试符号链接时更安全。结合test -f
和test -x
以确保没有竞争条件或最坏情况。 (示例:(test -f /home/godlikemouse/Daemon.php && test -x /home/godlikemouse/Daemon.php) || exit 1)
)
有关创建 sysv init 脚本的更多详细信息,请参阅 http://refspecs.linuxbase.org/LSB_3.0.0/LSB-generic/LSB-generic/iniscrptact.html and bash scripting can be read at http://www.tldp.org/LDP/abs/html/index.html。强烈建议在编写系统控制程序(如 init 脚本)之前学习两者。