Answers:
混乱的答案是一些文档所说的。但这不是systemd实际执行的操作。(这也不是van Smoorenburg rc
所做 的。vanSmoorenburgrc
绝对不忽略insserv
初学者的LSB标头,该标头用于计算静态顺序。)Freedesktop文档,例如“不兼容”页面,实际上是错误的。这些和其他要点。(在HOME
事实上环境变量中往往设置,例如,这完全走到了很长一段时间任何地方无证。现在它记录在手册中,至少,但Freedesktop的WWW页面仍然没有得到纠正。)
systemd的本机服务格式是service unit。systemd的服务管理适当地仅根据那些内容进行操作,它从可驻留(系统范围).service
文件的九个目录之一读取该目录。 /etc/systemd/system
,/run/systemd/system
,/usr/local/lib/systemd/system
,和/usr/lib/systemd/system
那些目录中的四个。
与van Smoorenburg rc
脚本的兼容性是通过名为的转换程序实现的systemd-sysv-generator
。该程序在/usr/lib/systemd/system-generators/
目录中列出,因此在每次引导时由systemd在引导过程的早期自动运行,并在以后每次指示systemd重新加载其配置时再次运行。
该程序是generator的一种辅助工具,其作用是在tmpfs中动态创建服务单元文件,在这9个目录中的另外三个目录(仅供生成器使用)中定位。 如果找不到在其他六个位置已经存在的该名称的本地systemd服务单元,则从中systemd-sysv-generator
生成运行van Smoorenburg rc
脚本的/etc/init.d
服务单元。
系统服务管理仅了解服务单元。编写这些自动(重新)生成的服务单元以调用van Smoorenburg rc
脚本。除其他外,它们具有:
[单元] SourcePath = / etc / init.d / wibble [服务] ExecStart = / etc / init.d /摆动启动 ExecStop = / etc / init.d /摆动停止
rc
普遍认为,van Smoorenburg 脚本必须具有LSB标头,并且在不遵循/etc/rc?.d/
系统施加的优先级的情况下并行运行。在所有方面这都是不正确的。
实际上,它们不需要LSB标头,如果不需要,则systemd-sysv-generator
可以识别出更为有限的旧RedHat注释标头(description:
,pidfile:
等等)。而且,在没有LSB头的情况下,它将退回到/etc/rc?.d
符号链接服务器场的内容,读取编码为链接名称的优先级,并从它们中构造一个前后顺序,从而对服务进行序列化。LSB报头不仅不是必需的,而且不仅它们自己在对事物进行序列化的顺序之前/之后进行编码,而且在完全不存在的情况下,回退行为实际上是明显的非并行操作。
/etc/rc3.d
似乎无关紧要的原因是您可能已通过另一个/etc/rc?.d/
目录启用了该脚本。 systemd-sysv-generator
转换以任何形式列出的内容/etc/rc2.d/
,/etc/rc3.d/
并/etc/rc4.d/
转换成Wanted-By
与systemd的本机关系multi-user.target
。运行级别在系统世界中已“过时”,您可以将其忘记。
systemd.exec
。系统手册页。Freedesktop.org。systemd
并且/etc/init.d脚本未设置为“启动时启动”,它仍将按预期运行,但不会显示在show-units列表:unix.stackexchange.com/a/518894/8337
Systemd 与SysV初始化脚本向后兼容。根据LSB 3.1,初始化脚本必须具有信息注释约定,该注释约定定义了脚本何时必须启动/停止以及脚本启动/停止所需的条件。这是一个例子:
### BEGIN INIT INFO
# Provides: my-service
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop service my-service
# Description: my-service blah blah ...
### END INIT INFO
这是一个注释部分,SysV会忽略它。另一方面,systemd读取该依赖项信息并根据该信息运行那些脚本。
但是有一点,systemd和SysV在初始化脚本方面有所不同。SysV基于文件名中的脚本顺序执行脚本。Systemd没有。如果满足依赖关系,systemd将立即运行脚本,而无需遵守脚本名称的编号。其中一些很可能会因为订购而失败。还有许多其他不兼容性应考虑。
如果存在同一服务的初始化脚本和.service文件,则在满足依赖关系后,systemd将同时执行这两个命令(对于init脚本,则是在LSB头文件中定义的依赖项)。