我试图让我的定制守护进程在启动时和调用时运行
update-rc.d ydcd enable
我收到错误
update-rc.d: using dependency based boot sequencing
update-rc.d: error: MyDaemon Default-Start contains no runlevels, aborting.
我运行的是 Debian wheezy,init 是 SysVinit。
谷歌搜索并没有给我任何有价值的信息,所以我来到这里作为最后的手段。
这里发生了什么?我需要在 init.d 脚本中更改哪些内容才能使其正常工作?
编辑:
这是脚本:
#!/bin/bash
#
#ydcd.daemon
#
# chkconfig: 2345 85 15
# description: MyServiceName
# processname: MyServiceName
# source function library
. /lib/lsb/init-functions
RETVAL=0
NAME=ydcd.daemon
# YOU CAN SET ANY PATH BUT IS RECOMENDED TO USE THE DISTRO'S STANDARD ONE.
DAEMON=/home/debian/yd_cd/$NAME
prog=$(basename $DAEMON)
lockfile=/var/lock/$NAM
SVC_FILE=$DAEMON
start() {
if [ -f $SVC_FILE ]; then
#reset
echo -n "Starting "$SVC_FILE": "
RETVALS=$(start-stop-daemon -S -b -x $SVC_FILE -- -r)
Count=${#RETVALS[@]}
RETVAL="[FAIL]"
if [ $Count -eq 0 ]; then
RETVAL="[OK]"
elif [ $Count -eq 1 ]; then
if [ ${#RETVALS[0]} -eq 0 ]; then
RETVAL="[OK]"
else
iStart=${#SVC_FILE}
iLength=${#RETVALS[0]}
Response=${RETVALS[0]:(iStart+1):7}
RETVAL=$Response
if [ "$Response" == "already" ]; then
RETVAL="[OK]"
fi
fi
fi
echo $RETVAL
return 0
else
echo $SVC_ALIAS" not installed" $SVC_DIR
exit 2;
fi
}
stop() {
echo -n "Shutting down "$SVC_FILE":"
RETVALS=$(start-stop-daemon -K -x $SVC_FILE -- s)
#additional PROCKILLS=$(killall -w -q -e $SVC_PROCESS_NAME $SVC_FILENAME)
Count=${#RETVALS[@]}
Index=0
RETVAL="[FAIL]"
if [ $Count -eq 1 ]; then
if [ ${#RETVALS[0]} -eq 0 ]; then
RETVAL="[OK]"
else
Response=${RETVALS[0]:0:2}
RETVAL=$Response
if [ "$Response" == "No" ]; then
RETVAL="[OK]"
fi
fi
else
RETVAL="[OK]"
fi
echo $RETVAL
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $SVC_SERVICE_SCRIPT
;;
restart)
stop
start
;;
*)
echo $SVC_ALIAS" [Invalid Startup Parameters]"
echo "Usage: {start|stop|status|restart}"
exit 1
;;
esac
exit $?
答案1
Debian 现在默认使用 systemd,并且没有“运行级别”。像您使用的命令一样的旧命令应该工作,为了“工作”的某种价值。
答案2
chkconfig
您的脚本开头有旧式注释块。
即使您使用 SysVinit,现代初始化脚本管理系统也是基于依赖关系的:需要告知您的服务依赖于哪些其他服务。这需要一个更新样式的 LSB 兼容注释块,如下所述man 5 init-d-script
:
### BEGIN INIT INFO
# Provides: ydcd.daemon
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: brief one-line description
# Description: A more verbose description of your service
# possibly on multiple lines.
### END INIT INFO
这允许自动排序启动脚本,并且还允许系统在依赖关系允许的情况下并行运行多个启动脚本。这有可能大大加快系统启动过程——虽然不如切换到真正的基于依赖项的初始化系统那么快,但也不是微不足道的。