크론 작업 스케줄러가 정말 정확합니까?
내 말은, 매일 밤 가능한 최신 버전을 실행하려면 스크립트가 필요하지만 다음 날 00:00 이전에.
나는 23.59 (또는 오후 11:59)에 크론 작업을 이상적으로 수행하지만 시스템이 실제로 정확합니까? 1 초가 중요하므로 cron 작업을 23:58로 설정하여 시간을 두어야합니까?
크론 작업 스케줄러가 정말 정확합니까?
내 말은, 매일 밤 가능한 최신 버전을 실행하려면 스크립트가 필요하지만 다음 날 00:00 이전에.
나는 23.59 (또는 오후 11:59)에 크론 작업을 이상적으로 수행하지만 시스템이 실제로 정확합니까? 1 초가 중요하므로 cron 작업을 23:58로 설정하여 시간을 두어야합니까?
답변:
cron이 보장 할 수있는 것은 작업이 지정된 시간보다 빨리 시작된다는 것입니다 (시스템 시계의 정밀도에 따라 다름). 그러나 작업 종료 시간을 보장 할 방법이 없습니다. 그것은 많은 요인에 달려 있습니다 :
특정 완료 시간이 필요하지 않도록 디자인을 변경하는 것이 좋습니다.
O_CREAT
하고 O_EXCL
플래그를 지정하면 파일이 로컬 파일 시스템에있는 한 원자 적입니다.
나는 이것이 cron 데몬에 의존한다고 가정하지만 문서와 표준에 따르면 분을 지정하면 지정된 분에 작업이 실행된다는 내용이 표시됩니다.
만나다:
시계가 정확한 시간으로 똑딱 거리면 스크립트가 시작되지만 그 시간이 지나면 완료됩니다.
일반적으로 cron은 23:59:00에 시작하여 모든 crontab 파일을 스캔하고 23:59 와 관련된 사용자를 필터링 한 다음 시작합니다. 파일이 많지 않고 모두 몇 줄만 포함하기 때문에이 파일을 스캔하는 것이 매우 빠릅니다. 따라서 일반적으로 크론 작업 은 23:59:00 또는 23:59:01 에서 시작 하여 의도적으로이 프로세스를 느리게하는 방법이 있습니다. (예를 들어 crontab에 수백만 줄을 추가하십시오). 시스템에 과부하가 걸리면 그렇게 빨리 작동하지 않습니다.
또한 이것은 분명히 구현에 따라 다릅니다.
매우 정확한 시작 시간이 필요한 경우 원하는 시간까지 휴면 한 다음 실행하는 프로그램을 만드는 것이 좋습니다 (예 : c ++ 11 사용 ). 그러나 비 실시간 OS에서는 이것이 정확하지 않습니다! 또한 PC의 시계는 정확한 시간을 모릅니다!
모든 경우에, 이것은 단지 원하는 시간에 프로그램이 시작 되도록합니다. 주어진 시간까지 프로그램 이 성공적으로 종료 된다고 보장 할 수는 없으므로 해당 요구 사항에 대해 무언가를 변경해야한다고 믿습니다.
전체 스크립트 실행 시간과 서버 시간의 정밀도에 따라 다릅니다.
59 23 * * * /some/script/file.sh
23:59에 정확하게 스크립트를 시작 하지만 오래 작동하는 명령이 있으면 자정 이후에 스크립트의 일부가 실행될 수 있습니다.