进一步阅读

进一步阅读

我正在将 SysV init 样式文件转换为 Systemd Unit 文件,它的 init 部分块如下所示:

### BEGIN INIT INFO
# Provides:          ifcheck 
# Required-Start:    $local_fs 
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start:     S
# Default-Stop:      
# Short-Description: Network interfaces check & replace
# Description:       Checks if the interfaces were corrupted or if the special section is missing. If so, a default version will be copied over.
### END INIT INFO

我知道运行级别 0-6 对应于各种 systemd 目标:

╔══════════════════════╦═══════════════════╗
║ Run Level (SysVinit) ║  Systemd Target   ║
╠══════════════════════╬═══════════════════╣
│ Run level 0          │ poweroff.target   │
├──────────────────────┼───────────────────┤
│ Run level 1          │ rescue.target     │
├──────────────────────┼───────────────────┤
│ Run level 2          │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 3          │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 4          │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 5          │ graphical.target  │
├──────────────────────┼───────────────────┤
│ Run level 6          │ reboot.target     │
├──────────────────────┼───────────────────┤
│ Emergency            │ emergency.target  │
└──────────────────────┴───────────────────┘
(According to https://www.tecmint.com/change-runlevels-targets-in-systemd/ )

但我以前从未见过S运行级别。我见过一些定义表明它适用于单用户尽管还有其他人将其定义为其他运行级别的同义词还是其他人没有确定的定义

我知道我正在使用的版本很可能是Linux 标准基础规范因为紧接在初始化信息块之后的是lsb 初始化函数(来源自. /lib/lsb/init-functions)。该系统还运行 Debian 8 Jessie。

我应该在运行级别的等效 systemd 单元文件中放置什么目标S

答案1

S在 systemd 中没有直接对应关系。该systemd-sysv-generator程序不处理此类 van Smoorenburgrc脚本。

德班曾经拥有该程序的修补版本,包装了一个在服务单元内rc使用的脚本S,没有默认依赖项,并且是所需要的sysinit.target。这是不完美的,但是后来全部的操作systemd-sysv-generator是不完美的,因为没有一种万能的机械方法来翻译范·斯穆伦堡rc脚本。

Debian systemd 人员早在 2016 年 7 月就废除了该补丁,当时他们认为rcDebian 中使用的所有 van Smoorenburg 脚本S都已被适当的服务单元取代。你的似乎是自家种植的。

在这种情况下,您最好完全忘记S运行级别。我的有根据的猜测,仅基于描述,您真正应该制作的是一个服务单元,它是:

默认依赖项=否
After=local-fs.target
之前=network-pre.target
Wants=network-pre.target
Wanted-By可能是合适的basic.target

根据您的服务的实际用途,之后的订购local-fs.target很可能是多余的。但这是只有你才能决定的事情。

进一步阅读

相关内容