예를 들어 매시간 실행되는 crontab 작업이 있는데 해당 작업을 완료하는 데 1시간 이상 걸릴 수 있는 경우 다음 작업이 실행되지 않습니까?
답변1
아니요, 일종의 잠금 메커니즘을 구현하지 않으면 cron 스크립트가 병렬로 실행됩니다.
바라보다한 번에 하나의 쉘 스크립트 인스턴스만 실행되도록 하는 빠르고 더러운 방법 그리고 쉘 스크립트의 잠금이 정확합니까?가능한 해결책을 찾으십시오.
더 쉬운 방법은 lockfile
다음과 같이 사용하는 것입니다.답변
또는 런원 패키지(참조:이 답변) - 감사해요게티프딕추천하기 때문이죠.
답변2
게다가whenjobs
그 목표는“강력하면서도 간단한 크론 대체품”. ~에서맨페이지:
사전 기능
작업이 실행되기 전에 "pre" 함수가 호출되도록 예약할 수 있습니다. 함수는 ("false"를 반환하여) 작업을 실행하지 않기로 결정할 수 있습니다.
이를 사용하는 방법 중 하나는 동일한 작업의 인스턴스가 이미 실행 중인 경우 특정 작업이 실행되는 것을 방지하는 것입니다.
job "only one"
pre (Whentools.one ())
every 10 seconds :
<<
# Takes longer than 10 seconds to run, but 'Whentools.one ()'
# will ensure only one is ever running.
sleep 11
>>
(또한 제공하고 작업 인스턴스 실행을 Whentools.max n
허용합니다 n
. 기본적으로 Cron과 유사하게 작동합니다.)