我的一些安装脚本正在使用 insserv,它在 Ubuntu 16 上运行良好。现在在 Ubuntu 18 上,虽然包本身(虽然非常精简)在那里,但二进制 insserv 却丢失了。
切换到 systemd init 系统是否很困难?奇怪的是,我找不到任何关于 Ubuntu 18 上 insserv 不可用的公告。
答案1
使用旧版 init 脚本与 systemd 并不难。下面是一个例子。给出以下 SysV init 脚本/etc/init.d/mylittledaemon
:
#!/bin/bash
### BEGIN INIT INFO
# Provides: littledaemon
# Required-Start: $remote_fs
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 1
# Description: My little daemon
### END INIT INFO
case "$1" in
start)
(sleep 5000) </dev/null >/dev/null 2>&1 &
;;
stop)
pkill -f "sleep 5000"
;;
esac
你可以像这样使用 systemd 启用它:
$ sudo chmod +x /etc/init.d/mylittledaemon
$ sudo systemctl enable mylittledaemon
mylittledaemon.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable mylittledaemon
然后使用启动它
$ sudo systemctl start mylittledaemon
这将查看 LSB 信息注释并实际调用update-rc.d
,就像 insserv 所做的那样。它还将使用 生成临时 systemd 服务单元systemd-sysv-generator
。
也可以看看:http://manpages.ubuntu.com/manpages/bionic/man8/systemd-sysv-generator.8.html
更好的长期方法是将您的 init 脚本转换为 systemd 服务单元。网上有很多教程,例如这个:http://0pointer.de/blog/projects/systemd-for-admins-3.html