我正在使用一些模板化计时器单元来运行一组模板化服务。有些备份作业和关联的维护任务需要备份存储库上的独占锁,并且不能与备份作业同时运行。我正在尝试弄清楚如何设置这些单元,以便正确排序作业。
例如,我有以下服务模板:
backup@.serviceclean@.service我有以下计时器模板:
backup-daily@.timerbackup-weekly@.timerclean-daily@.timerclean-weekly@.timer单元backup-daily@.timer启动相应backup@.service实例的位置可能类似于:
[Unit]
Description=daily backup of %i
[Timer]
OnCalendar=daily
Unit=backup@%i.service
[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)
如果我跑...
systemctl enable --now backup-daily@foo.timer clean-daily@foo.timer
Run Code Online (Sandbox Code Playgroud)
...我需要确保 clean@foo 服务在 backup@foo 服务完成之前不会运行。
到目前为止,我想出的唯一解决方案是放弃OnCalendar=daily并使用显式启动时间,以便我可以保证备份作业首先启动(例如,在凌晨 1 点启动备份作业,在凌晨 2 点启动维护作业),然后利用某种锁定(例如,flock)命令可确保维护作业在备份作业完成后才开始。
这可行,但有点hacky。如果有更好的方法使用 systemd 来解决这个问题,我想弄清楚。
经过一番思考后,有一个明显的答案:在clean@.service模板中,添加对相应backup@.service实例的依赖项,如下所示:
[Unit]
After=backup@%i.service
Run Code Online (Sandbox Code Playgroud)
只要服务并行启动,这种方法就可以正常工作。我现在不知道具有相同OnCalendar设置的服务是否并行启动;一旦我弄清楚了这个答案,我就会更新这个答案。
| 归档时间: |
|
| 查看次数: |
3647 次 |
| 最近记录: |