这是因为许多Linux发行版(尤其是基于Systemd的发行版)提供了一个兼容性机制,允许使用systemctl
来管理传统的SysV init脚本。
这个兼容性机制是通过systemd-sysv-generator
实现的。当这个生成器运行时,它会扫描/etc/init.d
目录中的脚本,并为每个脚本创建一个临时的Systemd服务单元文件。这些服务单元文件允许你使用systemctl
命令来管理这些脚本,就像它们是真正的Systemd服务一样。
因此,即使你没有显式地为你的脚本创建一个Systemd服务单元文件,并注册到systemctl
中,只要你的脚本位于/etc/init.d
目录中,并且具有正确的执行权限和格式,你仍然可以使用systemctl
命令来启动、停止、重启和查询它的状态。
然而,需要注意的是,使用这种兼容性机制可能不如直接使用Systemd服务单元文件来得灵活和强大。Systemd提供了许多高级功能,如依赖管理、并行启动、资源控制等,这些功能在SysV init脚本中是不可用的。因此,如果你需要利用这些高级功能,或者希望更好地集成到你的系统中,那么建议你编写一个真正的Systemd服务单元文件,并将其注册到systemctl
中。
下图中的脚本为tomcat的启动脚本,放在 /etc/rc.d/init.d 内,并未注册到systemctl中,但能使用systemctl启动或停止脚本