我全新安装了 Ubuntu 16.04.1 nginx
,当 dpkg 安装 nginx 时,它在两个位置注册了启动时间配置。
系统位置
systemd 配置,其中规定在启动时启动 nginx 守护进程(或“多用户目标”)
% ls -l /etc/systemd/system/multi-user.target.wants/nginx.service
/etc/systemd/system/multi-user.target.wants/nginx.service -> /lib/systemd/system/nginx.service
初始化V位置
initV 配置,规定在启动时启动 nginx 守护进程(或“运行级别 5”)
% ls -l /etc/rc5.d/S02nginx
lrwxrwxrwx 1 root root 15 Apr 2 23:27 /etc/rc5.d/S02nginx -> ../init.d/nginx
如果我禁用 nginx,systemd 会给出一些输出,表明正在发生某种向后兼容操作
% sudo systemctl disable nginx.service
Synchronizing state of nginx.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install disable nginx
insserv: warning: current start runlevel(s) (empty) of script `nginx' overrides LSB defaults (2 3 4 5).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script `nginx' overrides LSB defaults (0 1 6).
这将删除上面的两个符号链接。
为什么要这样设置呢?为什么不只有其中之一——新的 systemd 配置或旧的 systemV init ?
答案1
作为约旦注释,这是从 Debian 继承的,支持不同的 init 系统。不仅如此,您还可以更改初始化系统而无需重新安装,并期望您的配置能够保留 - 包括启用或禁用哪些服务。这就是 systemd 和sysvinit
设置保持同步的原因。 (请注意,至少某些正在使用的功能是由上游 systemd 提供的,而不是特定于 Debian 或 Ubuntu 的。)