我是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 "$1" in
start)
start
;;
stop)
stop
;;
reload|restart)
restart
;;
condrestart)
if [ -f $proc ]; then
restart
fi
;;
status)
status_at
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac
exit $?
exit $RETVAL
答案 0 :(得分:1)
此行产生错误:
test -x /home/godlikemouse/Daemon.php || exit 0RETVAL=0
如果要将RETVAL
的值设置为0,首先需要删除0,因为您不能拥有以数字开头的变量。
然后从第二个语句中删除值集,以便在Daemon.php不存在时退出。
test -x /home/godlikemouse/Daemon.php || exit
您也可以删除启动和停止功能中的2个空回显语句,如无操作。
案例陈述中也有错误。您需要引用案例选项并删除最后一个退出块,因为exit $?
将触发退出。
case "$1" in
"start")
start
;;
"stop")
stop
;;
"reload"|"restart")
restart
;;
"condrestart")
if [ -f $proc ]; then
restart
fi
;;
"status")
status_at
;;
答案 1 :(得分:0)
此脚本中存在多个语法和逻辑错误。要突出几点:
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,并且可以在http://www.tldp.org/LDP/abs/html/index.html读取bash脚本。强烈建议在编写系统控制程序(如init脚本)之前先学习它们。