创建新的 systemd 服务时,何时需要将 RemainAfterExit 选项设置为 true?

Posted

技术标签:

【中文标题】创建新的 systemd 服务时,何时需要将 RemainAfterExit 选项设置为 true?【英文标题】:When should the option RemainAfterExit needs to be set true when creating new systemd services? 【发布时间】:2016-10-30 13:58:58 【问题描述】:

我正在尝试编写一些服务。其中一些将“类型”选项设置为 oneshot。但是当需要将“RemainAfterExit”选项设置为真时,我仍然感到困惑。 (不仅服务需要在退出后处于活动状态)。

【问题讨论】:

如果其他服务想要或需要您的服务,RemainAfterExit=yes 似乎可以避免再次启动该服务。另外,如果 ExecStop= 被设置为执行反向任务。 这些服务文件定义了实现特定计算结果的方法。根据定义,创建和编辑它们就是编程。 【参考方案1】:

RemainAfterExit=yes 用于服务,它会以某种方式改变系统的状态。当您希望恢复该状态时,您只需停止服务即可。然后您可以重新启动它,但必须先停止它。一个示例是在文件系统中创建一个标志以供其他应用程序使用的服务。启动时,它创建标志文件,然后存在,但该服务由 systemd 保持活动状态。然后你可以停止它,它会删除标志文件。

RemainAfterExit=no 用于服务,它会执行一些操作,但不会更改系统的状态。一个示例是清理/tmp 的服务。您启动它,它会完成它的工作,然后处于非活动状态(无需停止它)。而且您可以随时重新启动它,并将再次对其工作(清理)。

【讨论】:

【参考方案2】:

来自 Systemd page 下面是 RemainAfterExit 的描述

RemainAfterExit= 采用一个布尔值,该值指定服务是否应被视为活动,即使其所有进程都已退出。默认为否。

这只是意味着如果您的所有进程都从服务退出开始,当您查询服务的状态时,如果此标志设置为 true,它仍然会显示活动。 如果设置为 false,则服务状态为非活动状态。

当您在启动期间添加对服务的依赖时,这特别有用。其中服务状态对于启动依赖服务很重要。

【讨论】:

【参考方案3】:

该标志对您自己的簿记和会计很有用。如果在完成后认为服务处于活动状态对您有用,您可以设置标志。

【讨论】:

以上是关于创建新的 systemd 服务时,何时需要将 RemainAfterExit 选项设置为 true?的主要内容,如果未能解决你的问题,请参考以下文章

使用systemd在系统关闭时运行脚本

何时将刷新令牌传递给 API

使用 gdbus 启动 systemd 服务

如何将包含 SysV 初始化脚本的 RPM 包移植到 systemd?

何时以及如何将 java 类加载器标记为垃圾收集?

CentOS 7 系列系统服务 systemd