데몬을 시작하는 스크립트를 잠급니다.

데몬을 시작하는 스크립트를 잠급니다.

cron을 사용하여 스크립트를 실행합니다.

*/10 * * * * flock -n /tmp/lock script

동시에 하나의 스크립트 인스턴스만 실행되도록 해야 합니다. 이를 위해 무리를 사용합니다. 문제는 때때로 이 스크립트가 데몬 프로세스를 시작하는데, 이 경우 데몬이 다음 스크립트의 실행을 차단한다는 것입니다.

가능한 해결책은 스크립트 끝에서 파일을 잠금 해제하는 것이라는 것을 알고 있지만 cron 명령에서 직접 이 작업을 수행할 수 있습니까?

답변1

데몬이 cron을 통해 실행되기를 원하는 것 같습니다. 그렇다면 이는 좋은 생각이 아닙니다. 이 무리가 때때로 실패하는 이유는 무엇입니까? /tmp 디렉토리를 사용합니다. 어쩌면 다른 프로세스가 오래된 파일을 삭제했을 수도 있습니다. 완료되면 Flock은 Flock되었지만 삭제된 파일을 계속 유지합니다. 또 다른 10분 크론 라운드에서는 다른 클러스터 인스턴스가 파일을 확인하지 못하고 다른 인스턴스를 생성한 후 불필요한 중복 파일을 실행합니다. 해결 방법은 잠금 파일을 /var/run 디렉터리나 다른 위치로 이동하는 것입니다. 데몬이 작업을 자주 종료하는 경우 종료 코드를 고려하세요. INT15 신호에 일부 종료 코드를 할당하십시오. "무한" 루프에서 데몬을 실행하세요. 이 루프는 sig15 또는 다른 것에 의해 데몬이 종료되었음을 감지해야 합니다. 그렇지 않으면 다른 루프를 실행하십시오. 15이면 루프를 종료하고 데몬을 종료합니다. debian 및 redhat에서 사용 가능한 runv 패키지를 사용할 수 있습니다. cron과는 완전히 다르게 작동합니다. 스크립트/데몬 실행 파일을 실행하고 완료되거나 충돌할 때까지 기다립니다. 나타나면 다시 시작하세요. 그러면 코드를 두 번 실행하는 것에 대해 걱정할 필요가 없으며 cron이 작업에 적합하지 않기 때문에 cron으로 게임을 끝낼 수 있습니다.

관련 정보