我一直在解决 sysVinit 服务在 systemd 环境中启动时无法正常联机的问题。我发现,当 /etc/systemd/system/ 中不存在上述服务的服务文件或覆盖时,它会正确自动启动。在这种情况下,据我所知,systemd 应该通过读取系统上存在的“遗留”sysvinit 脚本来动态加载启动脚本,尽管我不是 100% 清楚这一点。
我感到困惑的是,一旦我将 edit --full 选项传递给 systemctl 用于所述服务,就会在 /etc/systemd/system/ 中生成一个平面文件,并且该服务现在无法在启动时自动启动。使用编辑选项并尝试添加任何覆盖似乎也会导致服务无法启动。
如果需要,请在下面提供示例...
系统运行时的示例:
在此示例中,名为“ProgramExample”的服务在 /etc/init.d/programexample 和 /etc/rc.d/init.d/programexample 中有一个 init 脚本:
[root@centos7-box ~]# ls -l /etc/rc.d/init.d/programexample
-rwxr-xr-x. 1 root root 2264 Mar 29 14:11 /etc/rc.d/init.d/programexample
Run Code Online (Sandbox Code Playgroud)
/etc/systemd/system/ 中没有服务文件:
[root@centos7-box ~]# ls -lh /etc/systemd/system/programexample.service
ls: cannot access /etc/systemd/system/programexample.service: No such file or directory
Run Code Online (Sandbox Code Playgroud)
此配置中的 Systemctl 状态输出:
[root@centos7-box ~]# systemctl status programexample.service
? programexample.service - LSB: Start Program Example at boot time
Loaded: loaded (/etc/rc.d/init.d/programexample; bad; …Run Code Online (Sandbox Code Playgroud)