Mar*_*urg 153 init-script systemd init sysvinit
我刚切换到 debian jessie,大多数东西都运行正常,包括我的图形显示管理器wdm。
问题是,我只是不明白这是如何工作的。显然我的/etc/init.d/wdm脚本被调用了,因为当我exit在那里提前放置时,wdm 没有启动。但是当我或者重命名 /etc/rc3.d目录时(我的默认运行级别曾经是 3),然后 wdm 仍然启动。
我不知道 systemd 如何找到这个脚本,我不明白它对所有其他 init.d 脚本做了什么。
Jde*_*eBP 200
混乱的答案是一些文件所说的。但这不是 systemd 实际所做的。(这也不是 van Smoorenburgrc所做的。 对于初学者来说,van Smoorenburgrc绝对没有忽略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 Smoorenburgrc脚本的兼容性是通过名为systemd-sysv-generator. 该程序在/usr/lib/systemd/system-generators/目录中列出,因此在每次引导时在引导过程的早期由 systemd 自动运行,并且在每次 systemd 被指示稍后重新加载其配置时都会再次运行。
该程序是一个生成器,一种辅助实用程序,其工作是在 tmpfs 中动态创建服务单元文件,其中 9 个目录中的另外三个(仅供生成器使用)所在的目录。 systemd-sysv-generator生成运行 van Smoorenburgrc脚本的服务单元/etc/init.d,如果它没有找到其他六个位置中已经存在的具有该名称的本机 systemd 服务单元。
systemd 服务管理只知道服务单元。编写这些自动(重新)生成的服务单元以调用 van Smoorenburgrc脚本。除其他外,他们有:
[单元] SourcePath=/etc/init.d/wibble [服务] ExecStart=/etc/init.d/wibble start ExecStop=/etc/init.d/wibble stop
公认的观点是,van Smoorenburgrc脚本必须有一个 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 世界中是“过时的”,您可以忘记它们。
systemd.exec. systemd 手册页。Freedesktop.org。cha*_*aos 20
Systemd向后兼容SysV 初始化脚本。根据 LSB 3.1,init 脚本必须具有信息注释约定,定义脚本何时必须启动/停止以及脚本启动/停止需要什么。这是一个例子:
### 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
Run Code Online (Sandbox Code Playgroud)
这是 SysV 忽略的注释部分。另一方面,systemd 读取依赖信息并根据它运行那些脚本。
但是有一点,systemd 和 SysV 在初始化脚本方面有所不同。SysV 根据脚本在文件名中的编号按顺序执行脚本。Systemd 没有。如果满足依赖关系,systemd 会立即运行脚本,而不考虑脚本名称的编号。其中一些很可能会因为排序而失败。还有很多其他的不兼容问题需要考虑。
如果同一服务有 init 脚本和 .service 文件,systemd 将在满足依赖关系后立即执行这两个文件(在 init 脚本的情况下,在 LSB 标头中定义的那些)。
| 归档时间: |
|
| 查看次数: |
194526 次 |
| 最近记录: |