예를 들어 5분마다 실행되도록 crontab에 작업을 추가했는데 작업이 실제로 5분 내에 완료되지 않는지 알고 싶습니다. cron 데몬은 이전 인스턴스가 이미 실행 중이라는 것을 알고 다음 실행을 건너뛰나요? 아니면 어떻게든 프로세스에 논리를 구축해야 합니까? 어떻게?
답변1
아니요, cron과의 계약은 지정된 시간에 각 작업을 시작한다는 것입니다. Cron은 어떤 연속 작업이 "동일한 작업"인지 추적하지 않습니다.
이전 작업이 완료되지 않은 상태에서 작업을 시작하지 않으려면 작업 시작 부분에 무언가를 넣어서 작업이 일찍 종료되도록 해야 합니다. 예를 들어, 잠긴 파일을 저장하고 잠긴 파일을 열 수 없는 경우 종료하도록 작업을 예약할 수 있습니다.
* * * * flock -n /var/lock/myjob.lock /path/to/script
답변2
아니요, 그렇지 않습니다.
당신이 할 수 있는 일은 작업이 포함된 스크립트를 실행하도록 cron을 설정하고 특정 시간에 실행되도록 설정하는 것입니다. 각 시간 간격 전에 이 스크립트에서 작업을 종료/종료하고 cron이 다음 시간 간격에 다시 시작하도록 합니다.
답변3
https://www.timkay.com/solo/solo
...이렇게 하면 프로그램이 한 번에 여러 복사본을 실행하는 것을 방지할 수 있습니다. cron을 사용하면 이전 작업이 완료될 때까지 작업이 실행되지 않습니다. (문서:https://www.timkay.com/solo/)
예
* * * * * solo -port=3801 ./jobA.sh blah blah
jobA.sh가 1분 이상 걸리면 cron이 다시 solo를 호출하지만 포트 3801을 사용했기 때문에 solo는 오류를 반환하고 jobA.sh는 실행되지 않습니다.