Type=oneshot
服务单元:
在启动操作时阻塞,直到第一个进程退出,并且其状态将报告为 "正在激活"(activating);
一旦第一个进程退出,如果未设置 RemainAfterExit=true
,则从 "正在激活" 直接转换为 "停止"(inactive)状态(如果设置了,则会变为 "活动"(active)状态,但没有任何进程!);
可以有任意数量(0 或更多个)的 ExecStart=
指令,这些指令将按顺序执行(在开始下一个进程之前等待每个已启动的进程退出);
可以省略 ExecStart=
,但是可以有 ExecStop=
(与 RemainAfterExit=true
结合使用,用于安排在系统关机时运行的内容)。
Type=simple
服务单元:
不会在启动操作上阻塞(即在分叉出第一个进程后立即变为 "活动"(active)状态,即使它仍在初始化!);
一旦第一个进程退出,就会从 "活动" 转换为 "停止"(inactive)状态(没有 RemainAfterExit=
选项);
通常不建议使用此类型,因为无法区分诸如 "由于配置错误在启动时退出" 和 "在运行500ms 后崩溃" 等情况。
Type=oneshot
和 Type=simple
单元都:
Type=oneshot
和 KillMode=none
,但是只有在确定知道自己在做什么时才可以这样做)。Type = simple有点像是点火然后忘记。即使进程启动失败,systemd也只是分叉在ExecStart=中定义的进程并继续执行。
Type=oneshot
服务单元“不能有ExecStart=
”。这是不正确的。事实上,类型为oneshot
的服务可以有多个ExecStart=
指令。有关更多信息,请参阅任何最近的systemd.service
手册页面。 - rlandsterExecStart=
下述道:“除非Type=是oneshot,否则必须给出一个命令。当使用Type=oneshot时,可以指定零个或多个命令。” - intelfxExecReload
。 - Tony