确保同一模板的 systemd 计时器实例没有并行运行

确保同一模板的 systemd 计时器实例没有并行运行

我有一个 systemd 计时器模板[email protected]和相应的服务[email protected]。这项工作每天都会进行,并且有充足RandomizedDelaySec的 2 小时时间。这项工作有很多例子。

我可以告诉 systemd 尽量不要并行运行模板的所有实例吗?

这些作业具有较高的网络负载。并行运行它们会减慢速度,并且作业快速完成比按时运行更重要。

[email protected]Conflicts=job@*.timer不起作用。

[email protected]:

[Unit]
Description=Run network intensive script for %i

[Timer]
OnCalendar=daily
RandomizedDelaySec=2h
Persistent=true

[Install]
WantedBy=timers.target

[email protected]:

[Unit]
Description=Run network intensive script for %i

[Service]
Type=oneshot
ExecStart=/my/fancy/script.sh %i

答案1

我可能会通过向服务单元添加显式锁来解决这个问题:

[Service]
Type=oneshot
ExecStart=/usr/bin/flock -F /path/to/some/lockfile /my/fancy/script.sh %i

这将允许一次只运行一个脚本实例;其他人将阻塞,直到脚本完成。

相关内容