我有两个 systemd 计时器及其相关服务:
a.timer触发a.serviceb.timer触发b.service两个服务都使用系统包管理器执行内务管理任务,因此它们不能并行运行(事实上,如果在另一个服务正在运行时启动,则两个服务都会失败,因为两个服务都会尝试创建锁定文件)。
我的目标是确保这两项服务确实运行,因此b.service如果正在运行,则应延迟a.service,反之亦然。
如果我正确理解systemd.unit(5)我无法使用Conflicts=,因为这会在启动一项服务时主动停止一项服务。我不能使用After=或Before=之一(与Type=simple),因为这只会延迟第二个服务,直到第一个服务初始化(即仍在运行)。
Type=oneshot据我了解,一种解决方案是和的组合,因为 oneshot 使 systemd在主进程终止后After=认为单元处于活动状态(并立即死亡)。另一方面,Type=oneshot对于可能长时间运行的任务,明确不鼓励使用。
人们还可以.service使用以下方法将这两项任务放在一个单元中
ExecStart=/usr/bin/sh -c 'first-command; second-command'
Run Code Online (Sandbox Code Playgroud)
但我认为这非常丑陋,因为它将两个服务的执行间隔绑定在一起。
那么,拥有依赖于同一专有资源的多个服务的最系统化的方式是什么?
| 归档时间: |
|
| 查看次数: |
1312 次 |
| 最近记录: |