systemd 的 'oneshot' 和 'simple' 服务类型有什么区别?
What is the difference between systemd's 'oneshot' and 'simple' service types?
systemd
服务Type
oneshot
和simple
有什么区别?
此 link 声明使用 simple
而不是 oneshot
作为计时器。我无法正确理解它。
Type=oneshot
服务单位:
阻塞启动操作,直到第一个进程退出,其状态将报告为 "activating";
一旦第一个进程退出,从 "activating" 直接过渡到 "inactive",除非 RemainAfterExit=true
被设置(在这种情况下它变成 "active"没有进程!);
可能有任意数量(0 个或更多)的 ExecStart=
指令将按顺序执行(等待每个启动的进程退出,然后再启动下一个进程);
可能会遗漏 ExecStart=
但有 ExecStop=
(与 RemainAfterExit=true
一起用于在系统关闭时将事情安排到 运行)。
Type=simple
服务单位:
不会阻塞启动操作(即在分叉第一个进程后立即变为 "active",即使它仍在初始化!);
一旦第一个进程退出,从"active"过渡到"inactive"(没有RemainAfterExit=
选项);
通常不被鼓励,因为无法区分 "exited on start because of a configuration error" 和 "crashed after 500ms of runtime" 等情况。
Type=oneshot
和Type=simple
单位:
- 忽略第一个进程的任何子进程,所以不要将这些模式与分叉进程一起使用(注意:您可以将
Type=oneshot
与 KillMode=none
、 一起使用,但只有在以下情况下才这样做你知道你在做什么).
从 systemd 的角度来看,Type=simple
是一劳永逸。 Systemd 只是派生一个在 ExecStart=
中定义的进程并继续运行,即使该进程无法启动。
systemd
服务Type
oneshot
和simple
有什么区别?
此 link 声明使用 simple
而不是 oneshot
作为计时器。我无法正确理解它。
Type=oneshot
服务单位:
阻塞启动操作,直到第一个进程退出,其状态将报告为 "activating";
一旦第一个进程退出,从 "activating" 直接过渡到 "inactive",除非
RemainAfterExit=true
被设置(在这种情况下它变成 "active"没有进程!);可能有任意数量(0 个或更多)的
ExecStart=
指令将按顺序执行(等待每个启动的进程退出,然后再启动下一个进程);可能会遗漏
ExecStart=
但有ExecStop=
(与RemainAfterExit=true
一起用于在系统关闭时将事情安排到 运行)。
Type=simple
服务单位:
不会阻塞启动操作(即在分叉第一个进程后立即变为 "active",即使它仍在初始化!);
一旦第一个进程退出,从"active"过渡到"inactive"(没有
RemainAfterExit=
选项);通常不被鼓励,因为无法区分 "exited on start because of a configuration error" 和 "crashed after 500ms of runtime" 等情况。
Type=oneshot
和Type=simple
单位:
- 忽略第一个进程的任何子进程,所以不要将这些模式与分叉进程一起使用(注意:您可以将
Type=oneshot
与KillMode=none
、 一起使用,但只有在以下情况下才这样做你知道你在做什么).
从 systemd 的角度来看,Type=simple
是一劳永逸。 Systemd 只是派生一个在 ExecStart=
中定义的进程并继续运行,即使该进程无法启动。