【发布时间】:2016-12-26 04:55:18
【问题描述】:
systemd服务Typeoneshot和simple有什么区别?
这个link 声明使用simple 而不是oneshot 作为计时器。我无法正确理解。
【问题讨论】:
标签: systemd
systemd服务Typeoneshot和simple有什么区别?
这个link 声明使用simple 而不是oneshot 作为计时器。我无法正确理解。
【问题讨论】:
标签: systemd
Type=oneshot服务单位:
阻止启动操作,直到第一个进程退出,其状态将报告为“正在激活”;
一旦第一个进程退出,就会从“激活”直接转换为“非活动”,除非设置了RemainAfterExit=true(在这种情况下,它会变为“活动”而没有进程!);
可以有任意数量(0 个或更多)的 ExecStart= 指令,这些指令将按顺序执行(等待每个启动的进程退出,然后再启动下一个进程);
可以省略ExecStart=,但有ExecStop=(与RemainAfterExit=true 一起用于安排在系统关闭时运行)。
Type=simple服务单位:
在启动操作时不会阻塞(即在第一个进程分叉后立即变为“活动”,即使它仍在初始化!);
一旦第一个进程退出,就会从“活动”转换为“非活动”(没有RemainAfterExit= 选项);
通常不鼓励使用,因为无法区分“由于配置错误而在启动时退出”和“运行 500 毫秒后崩溃”等情况。
Type=oneshot 和 Type=simple 单位:
Type=oneshot 与KillMode=none 一起使用,只有在您知道自己在做什么的情况下才能这样做强>)。
【讨论】:
Type=oneshot 服务单元“不能有ExecStart=”。这不是真的。事实上,oneshot 类型的服务可以有多个 ExecStart= 指令。有关更多信息,请参阅 systemd.service 的任何最新手册页。
ExecStart= 下说:“除非 Type= 是 oneshot,否则必须给出一个命令。使用 Type=oneshot 时,可以指定零个或多个命令。”
ExecReload
从 systemd 的角度来看,Type=simple 有点像一劳永逸。 Systemd 只是 fork 一个在 ExecStart= 中定义的进程并继续前进,即使该进程无法启动。
【讨论】:
Type=simple 进程仍由 systemd 监控,并将根据 Restart 设置的值重新启动。