微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – systemd oneshot要求只执行一次

我有多个系统服务需要生成的EnvironmentFile.我有一个生成此环境文件的shell脚本,但由于在任何Exec …命令执行之前我需要该环境文件,因此我无法使用ExecStartPre = generate_env_file.sh.因此,我有另一个服务(generate_env_file.service)设置为运行该脚本作为oneshot:

[Service]
Type=oneshot
ExecStartPre=/usr/bin/touch /path/to/config.ini
ExecStart=/path/to/generate_env_file.sh

我有多个其他服务文件,其中包括:

[Unit]
Requires=generate_env_file.service
After=generate_env_file.service

如何保证两个或多个依赖服务(需要generate_env_file.service)不会并行运行并生成generate_env_file.service的两个并行执行?

我已经看过使用RemainAfterExit = true或者可能是StartLimitIntervalSec =和StartLimitBurst =来确保在一段时间内一次只能执行一个副本,但我不确定这样做的最佳方法.

解决方法:

RemainAfterExit = true是要走的路.在这种情况下,Systemd启动服务,Systemd将其视为已启动和实时.但是,这不包括执行systemctl restart generate_env_file.service的用例.在这种情况下,systemd将重新执行您的服务.要解决此问题,您可以在ExecStartPost =的运行文件系统中创建一个标记文件,并添加ConditionFileExists =指令以检查文件是否存在.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐