我对编写与systemd兼容的init脚本非常陌生。我尝试了以下示例:
#!/bin/sh
#
### BEGIN INIT INFO
# Provides: test
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Test.
# Description: Test.
### END INIT INFO
#
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
case "$1" in
stop)
log_failure_msg "Stop!"
exit 1
;;
start)
log_failure_msg "Start!"
exit 1
;;
restart)
log_failure_msg "Restart!"
exit 1
;;
status)
log_failure_msg "Status!"
exit 1
;;
*)
echo "Usage: $SELF start|stop|restart|status"
exit 1
;;
esac
# Some success paths end up returning non-zero, so exit 0 explicitly. See bug #739846.
exit 0
到目前为止,一切顺利。现在,我安装init脚本如下:
update-rc.d test defaults
update-rc.d test enable
同样,到目前为止,一切都很好。我专门将此初始化脚本设置为失败(我必须在测试期间这样做,以确认我遇到的问题。)
如果我运行/etc/init。测试开始时,它按预期失败,我可以在日志中看到错误消息。
但是,如果我运行/etc/init。测试停止,我的日志中没有任何内容,脚本成功返回。
似乎systemd在幕后施展了某种黑魔法,并以某种方式劫持了stop,但我不知道怎么做,我一直在谷歌上搜索,但始终没有成功。有人能帮助我理解为什么将stop传递给init脚本不会执行case块中的相应代码吗?
另外,status选项也不起作用(systemd只输出自己的状态信息)
我正试图在Ubuntu 16.04上运行这个。非常感谢。