[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
이렇게 하면 한 번에 하나의 스크립트 인스턴스만 실행할 수 있으며, 다른 인스턴스는 스크립트가 완료될 때까지 차단됩니다.