debian 9 init.d 和 systemd

debian 9 init.d 和 systemd

默认情况下,Debian 9 中的 systemd 是默认值。但我仍然在/etc/init.d目录下看到很多东西。这是否意味着我仍然可以将东西放在那里来启动?将首先执行哪个目录(systemd 或 init.d)?

答案1

systemd启动或systemctl daemon-reload运行时,systemd运行一个systemd-sysv-generator程序,该程序将创建一个脚本列表/etc/init.d并为它们生成相应的单元,除非它们已经存在.servicesystemd-native单元。.service

生成器将解释脚本中的任何 LSB 标头块init.d。它们看起来像这样:

### BEGIN INIT INFO
# Provides:          apache2
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Apache2 web server
# Description:       Start the web server
#  This script will start the apache2 web server.
### END INIT INFO

任何描述的依赖项(此处$local_fs $remote_fs $network $syslog $named)都将被转换为相应的 systemd 依赖项。由于脚本和 systemd 服务之间并不总是存在简单的一对一映射,因此生成器会专门将init.d一些 LSB 依赖项(如$remote_fs$network$named$portmap$time映射到相应的 systemd单元。.target

自动生成的包装服务将简单地运行相应的init.d脚本。basic.target只要它们的依赖项允许,所有包装器脚本都会被命令在 systemd 之后运行。这使得 LSB 标头变得相当重要:如果您依赖于生成器机制并且您的依赖项列表不完整,则很可能在它所依赖的内容准备就绪之前过早地systemd尝试运行您的脚本。init.d

某些打包服务也可能只有一个init.d脚本,但有两个或多个 systemd 服务文件(例如 NFS 服务)。在这种情况下,软件包将不依赖于生成器,而是同时提供脚本init.d和服务文件(名称不重叠)。软件包还将在 处提供一个/lib/systemd/system/<name of init script>.service指向的符号链接/dev/null。这使得systemd从 init 脚本自动生成的服务被视为永久屏蔽,而本机单元文件将代替处理服务进程。

相关内容