我有一个 systemd 计时器模板[email protected]
和相应的服务[email protected]
。这项工作每天都会进行,并且有充足RandomizedDelaySec
的 2 小时时间。这项工作有很多例子。
我可以告诉 systemd 尽量不要并行运行模板的所有实例吗?
这些作业具有较高的网络负载。并行运行它们会减慢速度,并且作业快速完成比按时运行更重要。
[email protected]
或Conflicts=job@*.timer
不起作用。
[Unit]
Description=Run network intensive script for %i
[Timer]
OnCalendar=daily
RandomizedDelaySec=2h
Persistent=true
[Install]
WantedBy=timers.target
[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
这将允许一次只运行一个脚本实例;其他人将阻塞,直到脚本完成。