길이 이야기(Giri's Story)

crontab(cronjob) 스케쥴, php관리툴 응용제어 본문

IT기술,개발/웹프로그래밍

crontab(cronjob) 스케쥴, php관리툴 응용제어

길이 2011. 3. 23. 18:31


리눅스 서버를 오랫동안 사용한 웹프로그래머라면 crontab (cronjob) 스케쥴러의 사용빈도가 갈수록 높아진다. crontab은 윈도서버의 "예약된 작업"과 마찬가지로 리눅스 서버에서 사용하는 주기별이나, 특정시간을 기준으로 예약된 프로그램을 실행할 수 있는 스케쥴러의 일종이다. 시스템의 정기적인 백업이나, 안정화를 위한 파일캐쉬처리, 서버운용 통계치 산출를 위한 자동화 집계등의 용도로 널리 이용되고 있다.

대규모 서비스를 만들때는 서버를 구매하거나 임대하여 root 권한으로 진행하므로, crontab 스케쥴 등록이 자유스럽지만 소규모 서비스를 만들경우 간편한 시스템유지보수와 시스템 모니터링이 쉬운 웹호스팅을 신청하는 경우가 많은데 이럴때는 서비스 제공회사별로 차이가 있겠지만, 다른 사용자와 서버를 같이 사용하다보니 crontab과 같은 서버에 부하가 예상되는 기능을 제공하지 않는 곳이 많다.

필자의 경우 많은 프로젝트를 진행하다보니 회사 자체에서 관리하는 서버와 웹호스팅으로 관리하는 서비스들이 무수히 많이 산재해 있는데...

웹호스팅으로 돌리는 서비스의 경우, 데이터 백업, 파일캐쉬처리, 통계처리 등등을 수행하는데 골머리를 앓았던 적이 있다. 매번 담당자가 서버에 들어가서 해당 작업을 수행하기에는 번거로운 업무인게 사실이다.
물론 스케쥴제어가 가능한 서버에서 웹호스팅의 원격지 서버를 제어하는 스케쥴을 등록하면 되지만,
이 스케쥴이라는 것을 많은 사람이 관리하거나 자주 변경해야 할 경우가 생기다보니 여간 불편한 사항이 한두가지가 아니였다.

그래서 만든것이 webcron 프로그램이다.
위의 이미지에서 보여지듯 php로 만든 스케쥴관리 프로그램을 만들어두고... 해당 프로그램에서는 주기적으로 스케쥴을 crontab 형식에 맞게 text파일로 파일내용을 생성한다.

미리 등록해둔 리눅스 서버에서는
>> crontab -i (파일절대경로)
와 같은 옵션으로 해당 파일의 내용을 crontab 내용에 덮어쓸 수가 있다.

아래는 위에서 언급한 구조로 설계되어 만들어진 webcron 시스템의 실제모형이다.



스케쥴을 관리하는 리스트 화면이다.
다양한 용도로 사용을 하고 있는데...
정기적인 데이터 파싱작업, DB컨텍팅 속도를 높이기 위해 일정주기별로 내용을 캐쉬파일로 전환해주는 캐싱작업, xml데이터를 준석하여 db에 저장하는 작업등... 스케쥴을 이용하여 할 수 있는 일이 무수히 많다.

요즘 요긴하게 사용하고 있는 기능중에 하나가,
원격지 서버의 웹페이지가 정상적으로 열리는지 에러가 있는지를 검사하여 에러검출시에 메일과 핸드폰 SMS로 통보를 해줄 수 있는 감시기능으로도 활용하고 있다.



스케쥴을 등록할 수 있는 상세화면이다. 여기서는 스케쥴 실행주기부터 로그를 남길지, 알림설정등등을 설정할 수 있다.




해당 스케쥴관리툴에서 생성된 스케쥴이 실제시스템에 crontab 리스트에 들어가면 해당내용을
다시 파일로 log를 남겨서 웹관리툴에서 모니터링 할 수 있도록 만들어 두었다.

crontab 상단부에는 시스템에서 스케쥴관리프로그램과 연관된 고정 스케쥴들이고,
하단부에 "Cronjob Scheduler List"라고 표시된 하단부의 스케쥴은 실제 DB에서 관리되어 연동되어 있는 스케쥴들이다.

예전에 외국사이트에서 crontabs 인가? cronjobs? 라는 이름으로 위의 모델을 웹으로 구현하여 서비스중인 사이트가 있었는데.. 지금 찾으려니 찾을 수가 없다.
기존 계정에 5개의 스케쥴에 한하여 무료이고 추가로 스케쥴을 등록하려면 돈을 받는 서비스였던 것으로 기억하는데... 없어졌나?

웹호스팅에서의 스케쥴등록... 이젠 문제없이 처리가 가능해졌다. ^^

위 기능을 가능하게 해주는 핵심 포인트는
시스템의 crontab 에서 사용할 수 있는 -i 옵션인데....
-i 옵션은 특정경로의 파일을 crontab 리스트의 내용으로 덮어쓸 수 있다는 것이다.

잘 활용해서 사용해 보시기 바란다.


p.s: 위 모델을 구현하기 위해서는 crontab 통제가 가능한 root권한이 있는 서버 1대가 필요하다는 전제조건이 있다.
Comments