매 시간마다 쉘 스크립트를 실행해야 합니다. 그러나 이전 실행이 완료될 때까지 다음 실행을 시작하고 싶지 않습니다.
답변1
질문에 Linux라는 태그를 지정했으므로 다음을 flock
사용하여 잘 알려진 파일을 잠글 수 있습니다.
flock "${TMPDIR:-/tmp}"/some_name.lock /path/to/your_command -options
명령의 두 번째 인스턴스(동일한 방식으로 실행)는 첫 번째 인스턴스가 완료될 때까지 기다립니다. 이 접근 방식의 문제점은 명령이 자주 1시간 이상 소요되면 잠기기를 기다리는 인스턴스가 점점 더 많이 축적된다는 것입니다.
또는 첫 번째 인스턴스가 아직 완료되지 않은 경우 두 번째 인스턴스 실행을 건너뛸 수 있습니다.
flock -n "${TMPDIR:-/tmp}"/some_name.lock /path/to/your_command -options
이 접근 방식의 문제점은 하루에 24회 미만으로 명령을 실행할 수 있다는 것입니다.
답변2
문제를 더 잘 정의해야 합니다.
Sato는 지연된 인스턴스 뒤에서 새 인스턴스를 백업할 수 있는 방법에 대해 설명합니다.
Jaroslav의 솔루션은 이전 인스턴스가 완전히 완료되지 않았음을 감지하는 메커니즘만 제공합니다.
또 다른 옵션은 스크립트 자체 내에서 스크립트의 다음 인스턴스를 예약하는 것입니다.
at now + 1 hour $*
이전 인스턴스가 완료되지 않았을 때의 동작을 정의하고, 인스턴스가 매시간 시작되도록 할지 또는 완료와 시작 사이에 정의된 간격으로 시작할지 여부를 정의해야 합니다.
답변3
스크립트가 시작될 때 일부 임시 파일을 생성하고 스크립트가 닫히기 전에 삭제할 수 있습니다. 스크립트는 파일이 존재하는지 확인해야 합니다. 이를 찾으면 종료되고 아무 작업도 수행되지 않습니다. 그렇지 않은 경우 새로 만들고 계속하세요.
또는 cron 작업에서 pgrep을 사용하여 실행 중인 스크립트를 확인하고 해당 스크립트가 실행되지 않는 경우에만 계속할 수 있습니다.