cron 데몬은 얼마나 정확합니까?


22

크론 작업 스케줄러가 정말 정확합니까?

내 말은, 매일 밤 가능한 최신 버전을 실행하려면 스크립트가 필요하지만 다음 날 00:00 이전에.

나는 23.59 (또는 오후 11:59)에 크론 작업을 이상적으로 수행하지만 시스템이 실제로 정확합니까? 1 초가 중요하므로 cron 작업을 23:58로 설정하여 시간을 두어야합니까?


13
왜 이러한 요구 사항이 있습니까? 나는 당신이 정말로하려고하는 일을 할 수있는 더 좋은 방법이있을 것이라고 생각합니다. (cron 작업을 예약하는 것보다 조금 더 많은 노력이 필요하지만 그다지 많지는 않습니다.)
David Z

나는 정밀도가 10 분인 오래된 바보 크론을 사용했습니다.
joshudson

7
귀하의 요구 사항은 나에게 매우 신뢰할 수없는 것 같습니다. 자정에 시스템 부하가 높으면 어떻게해야합니까? RT 시스템이 없으면 어떤 것도 보장 할 수 없습니다.
Thomas Erker

항상 사용 가능하고 1 초 안에 항상 작업을 완료 할 수있는 서버를 확보 할 수 있다고해도 잘못 될 수있는 사항이 여전히 있다는 것을 고려하십시오. 예를 들어, 시계는 깨닫지 않고 표류하기 시작할 수 있습니다. 이것은 정말, 매우 깨지기 쉬우 며 시스템을 변경해야한다는 위의 의견에 동의합니다.
Chris Hayes

답변:


24

cron이 보장 할 수있는 것은 작업이 지정된 시간보다 빨리 시작된다는 것입니다 (시스템 시계의 정밀도에 따라 다름). 그러나 작업 종료 시간을 보장 할 방법이 없습니다. 그것은 많은 요인에 달려 있습니다 :

  • 시스템은 어떻게로드됩니까
  • 직업은 무엇을 하는가
  • 하드웨어 문제로 인한 속도 저하
  • 네트워킹 문제로 인한 속도 저하 (작업이 네트워킹에 의존한다고 가정)

특정 완료 시간이 필요하지 않도록 디자인을 변경하는 것이 좋습니다.


1
이를 수행하는 가장 쉬운 방법은 아마도 cron을 통해 시작된 작업이 파일을 작성하여 작업이 종료 될 때마다 (성공 또는 실패한 경우) 삭제 된 다음 다음 작업 (목적이라고 가정)을 나타내는 파일을 작성하는 것입니다. 파일이 사라질 때까지 기다렸다가 작업을 수행하십시오.
CVn

@ MichaelKjörling 파일을 확인한 후 생성하는 것이 atomic이 아닌 파일 대신 디렉토리를 사용해야합니다 .
8bittree

1
@ 8bittree 사용 가능한 경우 무리 도 사용할 수 있습니다.
user9517은 GoFundMonica

1
@ MichaelKjörling 그러나 올바른 경우가 더 간단한 경우 왜 괜찮은 경우를 귀찮게합니까?
8bittree

4
@ 8bittree 사용 O_CREAT하고 O_EXCL플래그를 지정하면 파일이 로컬 파일 시스템에있는 한 원자 적입니다.
kasperd

14

나는 이것이 cron 데몬에 의존한다고 가정하지만 문서와 표준에 따르면 분을 지정하면 지정된 분에 작업이 실행된다는 내용이 표시됩니다.

만나다:

시계가 정확한 시간으로 똑딱 거리면 스크립트가 시작되지만 그 시간이 지나면 완료됩니다.


로드가 매우 적은 가상 서버가 있지만 1 분마다 실행되도록 설정된 크론이 때때로 0, 1, 2, 때로는 최대 17 초에 시작됩니다. 내 생각에 서버 외부의 다른 프로세스가 CPU와 같은 리소스의 가용성에 영향을 줄 수 있으므로 가상 서버에서 cron의 정확도가 떨어질 수 있습니다.
Liam

8

일반적으로 cron은 23:59:00에 시작하여 모든 crontab 파일을 스캔하고 23:59 와 관련된 사용자를 필터링 한 다음 시작합니다. 파일이 많지 않고 모두 몇 줄만 포함하기 때문에이 파일을 스캔하는 것이 매우 빠릅니다. 따라서 일반적으로 크론 작업23:59:00 또는 23:59:01 에서 시작 하여 의도적으로이 프로세스를 느리게하는 방법이 있습니다. (예를 들어 crontab에 수백만 줄을 추가하십시오). 시스템에 과부하가 걸리면 그렇게 빨리 작동하지 않습니다.

또한 이것은 분명히 구현에 따라 다릅니다.

매우 정확한 시작 시간이 필요한 경우 원하는 시간까지 휴면 한 다음 실행하는 프로그램을 만드는 것이 좋습니다 (예 : c ++ 11 사용 ). 그러나 비 실시간 OS에서는 이것이 정확하지 않습니다! 또한 PC의 시계는 정확한 시간을 모릅니다!

모든 경우에, 이것은 단지 원하는 시간에 프로그램이 시작 되도록합니다. 주어진 시간까지 프로그램 성공적으로 종료 된다고 보장 할 수는 없으므로 해당 요구 사항에 대해 무언가를 변경해야한다고 믿습니다.


2
crontab은 메모리에 저장되어 있다고 생각합니다. crontab 뒤에있는 파일을 직접 편집하면 (crontab -e 대신 cron에 알리는 대신 crontab -e 대신) 변경 내용이 적용되지 않습니다. cron에는 어떤 작업이 일어나고 있는지 알아 내기 위해 가동 중지 시간이 있습니다. 작업이 실행될 때까지 "잠자기"할 수 있습니다.
AMADANON Inc.

0

전체 스크립트 실행 시간과 서버 시간의 정밀도에 따라 다릅니다.

59 23 * * * /some/script/file.sh

23:59에 정확하게 스크립트를 시작 하지만 오래 작동하는 명령이 있으면 자정 이후에 스크립트의 일부가 실행될 수 있습니다.


정확히 23:59 에 23:59:00에서 23:59:59까지 가능합니까?
AL

2
일반 cron에는 초가 없습니다. 이 59 초를 더 얻으려면 코드 상단에 'wait (59)'를 추가해야합니다.
헨리의 고양이

4
실제로 @AL은 항상 xx : xx : 00 또는 xx : xx : 01에서 실행되는 것을 보았지만로드가 많은 시스템에는 약속이 없으며 약속이 없습니다.
hobbs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.