cron
내부에서 어떻게 작동하는지 알고 싶습니다 . 프로세스가 무한 while 루프에서 현재 시간을 지속적으로 확인하고 있습니까(따라서 지속적으로 CPU 사이클을 소비합니까)? 아니면 일부 기능이 인터럽트를 생성하고 cron
데몬에 알리나요?
답변1
한번은 vixie-cron 소스 코드를 읽고 병원에 입원한 적이 있습니다. 그러나 나중에 "어떤 함수가 인터럽트를 생성합니다"를 찾고 있다면 alarm(2)
시스템 호출을 조사해야 합니다. 미리 결정된 시간에 커널이 SIGALRM
신호를 보내면 이를 캡처할 수 있습니다. 그동안 귀하의 프로세스는 다른 작업을 수행하거나 sleep()
제가 병원에서 했던 작업을 수행할 수 있습니다.
답변2
작동 방식에는 많은 변형이 있다고 확신합니다.드크론(일명 Dillon의 크론 데몬)은 한번에 최대 60초까지 Sleep을 하고, 필요하다면 1분마다 00초에 깨어나도록 Sleep 시간을 줄여 동기화를 시도하는 것이 특징입니다.
sleep()
이는 CPU를 사용하지 않고 프로세스를 절전 모드(신호가 발생하지 않는 한)로 전환하는 데 사용됩니다 . 깨어나면 파일 cron.update
( crontab
편집으로 생성됨)을 확인합니다. 필요한 경우 실행 대기열을 다시 생성하고 예상 작업을 실행한 다음 다시 절전 모드로 전환합니다.
적어도 하나의 cron 데몬( fcrond
)은 sleep/check 방법 대신 crontab 편집기에서 cron 데몬으로 보낸 신호를 사용합니다.
나는 crond가 1분에 한 번 이상 자주 실행되는 것을 본 적이 없으므로 일반적으로 리소스를 거의 사용하지 않습니다.
/proc
Linux에서 바이트 읽기/쓰기 또는 iowait와 같은 항목을 살펴보면 crond
상대적으로 많이 사용된다는 것을 알 수 있습니다. 이는 CentOS 5.x에서와 같이 시작하는 모든 하위 프로세스를 소비하게 되기 때문입니다.
# grep "^[rw]" /proc/`pgrep crond`/io
rchar: 153463658151
wchar: 91095820045
read_bytes: 44480745472
write_bytes: 2261389312
(이 경우 계획된 패키지 업데이트 및 ASLR/사전 링크 작업 덕분입니다)
당신은 또한 볼 수 있습니다https://stackoverflow.com/questions/3982957/how-does-cron-internally-schedule-jobs.