手册页systemd.service(5)
解释了Type
服务的选项:
Type=
配置该服务单元的进程启动类型。
simple
、forking
、oneshot
、dbus
或之一。notify
idle
如果设置为 simple(如果既没有指定也
Type=
没有指定BusName=
,则为 默认值ExecStart=
),则预计配置的进程ExecStart=
是服务的主进程。在此模式下,如果进程向系统上的其他进程提供功能,则应在守护进程启动之前安装其通信通道(例如,由 systemd 通过套接字激活设置的套接字),因为 systemd 将立即开始启动后续单元。
这对我来说意味着 systemd 不会在这里并行启动这些单元。也在这里:
如果设置为
forking
,则预计配置的进程ExecStart=
将fork()
作为其启动的一部分进行调用。当启动完成并且所有通信通道都建立后,父进程预计将退出。子进程继续作为主守护进程运行。这是传统 UNIX 守护程序的行为。如果使用此设置,建议也使用该PIDFile=
选项,以便 systemd 可以识别守护进程的主进程。 一旦父进程退出,systemd 将继续启动后续单元。
换句话说,根据这个手册页,systemd 顺序执行服务单元?那么当 systemd 激活一个守护进程时,它会在激活后续单元之前等待它吗?根本没有意义。
Type
对其他机组的启动进程有何影响?