티스토리 뷰

728x90

배치 잡을 사용해보며 해당 시간이 되면 task를 수행하는 daemon이 내부적으로 어떻게 동작하는지 궁금해졌다.

infinite while loop를 돌며 cpu와 같은 리소스를 지속적으로 사용하는 것인지 아니면 다른 방법을 통해 최적화가 되어있는지 알고 싶었다.

 

결과적으로 말하자면 데몬의 종류는 여러 가지이며 크게 주기적으로 깨어나는 데몬(dcron)과 다음에 깨어나야할 시간을 계산 후에 sleep하는 데몬(fcron) 등이 있다.

 

두 종류의 데몬 모두 sleep()을 적극적으로 활용하여 cpu 사용량을 최소화시키는 최적화가 되어있었다.

 

dcron

Dillon's cron daemon, 줄여서 dcron이라 불리는 데몬은 최대 60초마다 한번씩 sleep()에서 깨어나 .crontab으로 구현된 cron.update를 확인한 후에 queue를 다시 만들어야 하면 새로 queue를 만들고, 정해진 task를 수행하고 다시 잠에 드는 식으로 구현되어 있다.

 

정확히 60초동안 잠드는 것이 아닌 매 분마다 정확히 00초에 깨기 위해 sleep()의 시간을 조절하기도 한다.

 

fcron

알고리즘이 시작되면 .crontab 파일을 홈 디렉토리에서 확인한다.

 

crontab 파일이 발견되면 다음 명령이 앞으로 언제 실행되어야 할지 계산한다.

 

해당 명령들을 Franta-Maly event list에 crontab의 5개의 필드(* * * * *)와 상응하는 시간대에 추가한다. 

 

메인 루프에 들어가서:

 

1. queue에 가장 앞에 있는 task를 계산하여 언제 실행되어야 할지 계산한다.

 

2. 계산한 시간 동안 sleep()한다.

 

3. 해당 시간에 깨어난 후 계산되었던 시간이 맞는지 검증하고 queue의 가장 앞에 있는 task를 해당 task를 생성한 user의 권한으로 백그라운드에서 실행한다. 

 

4. 실행이 끝나면 다시 다음에 깨어나야 할 시간을 계산하고 실행하였던 최우선 task를 queue의 가장 마지막에 넣는다.

 

 

레퍼런스

https://stackoverflow.com/questions/3982957/how-does-cron-internally-schedule-jobs

 

How does cron internally schedule jobs?

How do "modern" cron daemons internally schedule their jobs? Some cronds used to schedule a run every so often via at. So after a crontab is written out, does crond: Parse the crontab for all fu...

stackoverflow.com

 

https://unix.stackexchange.com/questions/64191/how-do-the-internals-of-the-cron-daemon-work

 

How do the internals of the cron daemon work?

I want to know how cron works internally. Does the process keep checking the current time in an infinite while loop (thus continually consuming CPU cycles)? Or does some function generate an interr...

unix.stackexchange.com

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함