我有一个非常简单的 SysVinit 服务/etc/rc.d
:
#!/bin/bash
PIDFILE="/var/run/test.pid"
status() {
if [ -f "$PIDFILE" ]; then
echo 'Service running'
return 1
fi
return 0
}
start() {
if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")"; then
echo 'Service already running'
return 1
fi
echo 'Starting...'
test & echo $! > "$PIDFILE"
return 0
}
stop() {
if [ ! -f "$PIDFILE" ] || ! kill -0 "$(cat "$PIDFILE")"; then
echo 'Service not running'
return 1
fi
echo 'Stopping...'
kill -15 "$(cat "$PIDFILE")" && rm -f "$PIDFILE"
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
当系统启动时,它会启动服务。
但是当系统停止时,它永远不会调用停止命令。我能想到的唯一原因是系统认为该服务未运行或未正确启动。
但是这样做有什么要求呢?
- 您是否需要为启动命令返回一个特殊的退出代码?
- 我需要创建一个文件来
/var/lock/subsys
表明它是活动的吗? - 还有什么可能导致系统认为服务没有启动?