Live Brilliant

cron 설정 본문

개발은 핵찜이야/리눅스

cron 설정

주인정 2012. 4. 13. 16:31

리눅스에서 스케쥴을 정의 할때 가장 많이 사용하는 방법이 cron 일것이다.

#>crontab -e

설정을 할 수 있는 창이 뜨고, 여기에 스케쥴을 입력하면 된다.

문법은.

* * * * * backup.sh

순서는

분, 시, 일, 월, 주

이다.

주는 1, 2, 3, 4, 5, 6, 7 순서로

월, 화, 수, 목, 금, 토, 일



글을 적을려고 했더니, 문서를 찾아 보다 아래의 사이트를 찾아 내게 되었습니다.

지금까지 본 문서중에서 가장 정확하고 자세하게 설명해 놓은 사이트라서 글을 옮겨와 적습니다.

http://blog.naver.com/prattler22?Redirect=Log&logNo=39500526


1장 : 주기적이고 반복적인 cron설정작업을 할 수 있는 crontab 개론


리눅스 서버관리를 하는 서버관리자에게 있어서 crontab명령어 만큼 고마운 명령어는 없을 것입니다. 왜냐하면 직접 작업을 하지않아도 작업설정을 예약해두고 주기적으로 반복실행할 수 있기 때문입니다. 즉, 백업이나 서버점검등과 같은 주기적이고 반복적인 작업을 crontab명령어로 설정해두면 정해진 시간에 주기적으로 자동실행하기 때문에 우리 같은 서버관리자들에게는 얼마나 큰 위안과 힘이 되는지 모릅니다.


첨언한다면 crontab의 설정방법과 함께 쉘프로그램의 기본제작법을 익힌다면 여러분들은 바로 고급관리자로 인정받을 수 있을 것입니다. 이 책에서는 쉘프로그램에 대해서도 각각의 명령어편에서 다루고 있으므로 참고하시고 이번 장에서는 시스템의 크론설정에 대해서 실무적인 사례를 들어 그 설정법을 배워보도록 하겠습니다.


즉, 필자는 주기적인 작업을 할 수 있는 크론(cron)설정에 대해서 많은 질문을 받아왔는데 이번 기회에 시스템의 주기적이고 반복적인 작업설정을 하는 크론(cron)설정법의 실무적인 방법들과 사례를 위주로 살펴보도록 하겠습니다.


간략히 표현하면 crontab은 시스템의 주기적인 cron작업의 설정, 수정등을 하는 명령어입니다. 시스템에서 가장 중요한 데몬(daemon)중의 하나인 crond와 직접적인 관련이 있는 명령어로서 수퍼유저(root) 또는 일반사용자들의 주기적이고 반복적인 특정 작업의 자동화를 설정하는 명령어입니다.


이 명령어로 설정한 작업이 주기적으로 실행되려면 crond데몬이 실행상태에 있어야합니다. 그리고 crond데몬은 /etc/rc.d/init.d/crond스크립트에 의해 시작, 종료, 재시작될 수 있습니다.


따라서 crontab이라는 명령어를 정확하게 이해하고 사용하려면 다음과 같은 데몬과 파일들을 정확하게 이해하셔야 합니다.


- crond 데몬

- /etc/crontab 파일

- /etc/rc.d/init.d/crond 스크립트

- /var/spool/cron디렉토리내의 크론설정파일들


명령어위치 : /usr/bin/crontab


사용형식

crontab [ -u 사용자ID ] 파일
crontab [ -u 사용자ID ] { -l | -r | -e }


이번 장에서는 root와 개별 사용자들의 cron설정방법과 수정,삭제, 확인하는 방법, 그리고 위의 파일들이 유기적으로 상호작용하여 작동하는 시스템 cron설정의 전반적인 내용들에 대해서 알아볼 것입니다.


2장 : 시스템 크론데몬(crond)의 기본 동작원리 분석



시스템 크론데몬 crond 실행 확인하기


crontab명령어의 사용법을 설명하기에 앞서 시스템에서 cron이 어떻게 동작하는가를 알아야합니다. 시스템에서 cron이 제대로 동작하기 위해서는 crond라는 크론데몬(cron daemon)이 동작하고 있어야만 합니다.


먼저 ps명령어로 crond가 동작중인가를 확인한 예입니다.

아래의 결과를 보시면 crond라는 데몬이 root권한으로 실행되어 있음을 알 수가 있습니다.



이렇게 crond가 동작중이면 시스템에 기본적으로 설정된 cron설정과 root의 cron설정, 그리고 개별사용자의 cron설정들이 정상적으로 동작하게 됩니다.


시스템 크론데몬 crond 실행, 중지, 재시작하기


시스템 크론데몬인 crond를 실행,중지,재시작하려면 /etc/rc.d/init.d/crond스크립트를 이용합니다.


먼저 crond를 시작하기 위해서는 “/etc/rc.d/init.d/crond start”라고 하시면 됩니다. 거의 대부분 리눅스 시스템이 부팅이 되면서 ntsysv 설정항목에 의해 crond가 시작되도록 설정되어 있으므로 crond는 부팅과 함께 자동 실행될 것입니다.(이책의 ntsysv명령어편 참조바람)



그리고 crond를 재시작하려면 위의 예와 같이 “/etc/rc.d/init.d/crond restart”라고 하시면 됩니다. 또한 crond의 실행을 중지하려면 위의 예와 같이 “/etc/rc.d/init.d/crond stop”이라고 하시면 됩니다.


시스템의 기본 cron설정파일 /etc/crontab의 실행내용 분석


시스템 크론데몬인 crond는 /etc/crontab파일의 설정을 읽어들여서 설정되어 있는대로 실행을 합니다. 아래의 /etc/crontab파일은 리눅스를 설치하면 기본적으로 설정되어 있는 내용으로서 시스템에 기본적으로 필요한 사항들을 주기적으로 자동실행하기 위한 설정사항입니다.


즉, /etc/crontab파일은 시스템 크론데몬인 crond에 의해 실행될 시스템관리에 꼭 필요한 주기적인 자동실행내용들이 저장되어 있는 파일입니다. 이 파일의 기본설정내용을 살펴보면 다음과 같습니다.



즉, 리눅스 시스템은 /etc/crontab파일의 설정에 의해 시스템관리를 위하여 다음과 같이 주기적인 실행을 하게 됩니다. 이 파일의 주된 설정내용을 살펴보면 다음과 같습니다.


매시 1회 자동실행하기위한 시스템 크론설정


01 * * * * root run-parts /etc/cron.hourly


/etc/crontab파일내에 존재하는 이 내용은 매일 매시 01분마다 /etc/cron.hourly디렉토리내에 존재하는 파일들을 실행하게 됩니다.


즉, /etc/cron.hourly 디렉토리에서 실행되는 파일들은 다음과 같습니다. 즉, 매시 01분마다 실행될 내용이 /etc/cron.hourly디렉토리에 저장되어 있는 것입니다. 아래 파일들은 여러분들께서 직접 그 내용을 확인해 보시기 바랍니다.



만약 여러분들께서 매시 01분마다 실행시키고자 하는 내용이 있다면 /etc/cron.hourly디렉토리에 스크립트파일로 만들어서 넣어두시면 됩니다.


매일 1회 자동실행하기위한 시스템 크론설정


02 4 * * * root run-parts /etc/cron.daily


/etc/crontab파일내에 존재하는 위의 내용은 매일 새벽4시 02분마다 /etc/cron.daily디렉토리내에 존재하는 파일들을 실행하게 됩니다. 즉, 매일 한번씩 실행될 내용이 저장될 디렉토리이며 이 디렉토리에서 실행되는 파일들은 다음과 같습니다.



만약 여러분들께서 매일 한번씩 실행시키고자 하는 내용이 있다면 /etc/cron.daily 디렉토리에 스크립트파일로 만들어서 넣어두시면 됩니다.


매주 1회 자동실행하기위한 시스템 크론설정


22 4 * * 0 root run-parts /etc/cron.weekly


/etc/crontab파일내에 존재하는 위의 내용은 매주 일요일 새벽 4시 22분마다 /etc/cron.weekly디렉토리내에 존재하는 파일들을 실행하게 됩니다. 즉, 매주 한번씩 실행될 내용이 저장된 디렉토리이며 이 디렉토리에서 실행되는 파일들은 다음과 같습니다.



만약 여러분들께서 매주 한번씩 실행시키고자 하는 내용이 있다면 /etc/cron.weekly 디렉토리에 스크립트파일로 만들어서 넣어두시면 됩니다.


매월 1회 자동실행하기위한 시스템 크론설정


42 4 1 * * root run-parts /etc/cron.monthly


/etc/crontab파일내에 존재하는 위의 내용은 매월 1일 새벽 4시 42분마다 /etc/cron.monthly디렉토리내에 존재하는 파일들을 실행하게 됩니다. 즉, 매월 한번씩 실행될 내용이 저장된 디렉토리이며 이 디렉토리에서 실행되는 파일들은 다음과 같습니다.



만약 여러분들께서 매월 한번씩 실행시키고자 하는 내용이 있다면 /etc/cron.monthly 디렉토리에 스크립트파일로 만들어서 넣어두시면 됩니다.


이렇게 리눅스는 시스템에 꼭 필요한 주기적인 실행내용들을 /etc/crontab파일에 설정해 두고서 시스템 크론데몬인 crond에 의해 실행시키고 있습니다. 이 설정내용을 잘 활용한다면 시스템관리에 매우 효율적으로 활용할 수 있습니다.


즉, 지금까지의 크론(cron)에 대한 설명은 이미 시스템에 설정되어있는 크론설정(/etc/crontab과 관련디렉토리들)을 이용하는 방법이였습니다. 이어지는 설명과 예들은 crontab명령어를 이용하여 직접 크론(cron)을 설정하는 방법에 대한 설명입니다.



3장 : 일반사용자의 crontab명령어 사용허가 또는 제한하는 설정


/etc/ 디렉토리에는 cron.allow파일과 cron.deny파일이 존재할 수 있습니다. 리눅스 초기설정에는 이 두파일은 존재하지 않기 때문에 root만이 crontab명령어를 사용할 수 있습니다.

즉, /etc/ 디렉토리에 cron.allow파일과 cron.deny파일이 존재하지 않는다면 root만이 crontab명령어를 이용하여 cron설정을 할 수 있다는 의미가 됩니다.


만약 일반사용자에게도 crontab명령어를 이용할 수 있도록 하기 위해서는 /etc/cron.allow파일에 사용자의 ID를 등록해 주어야 합니다. 반대로 일반사용자의 crontab명령어사용을 제한하고자 한다면 /etc/cron.deny파일에 사용자의 ID를 등록해 주시면 됩니다.


리눅스 설치시에 이 두 파일은 기본생성되어 있는 파일이 아니므로 수퍼유저(root)가 필요하다고 판단할 때에는 직접 만들어 주시면 됩니다.


이제 예를 위하여 필자가 설정한 두 파일의 예를 보도록 하겠습니다. 아래의 예를 보시면 /etc/cron.allow파일의 내용을 확인하고 있습니다.



위의 /etc/cron.allow파일에 등록되어 있는 root, bible, locli 계정 사용자는 crontab명령어를 이용하여 개인적인 cron설정을 할 수가 있습니다.


아래는 crontab사용이 허용된 두 사용자 중 bible이라는 사용자로 로그인하여 crontab명령어를 사용하여 cron설정을 하기위해 “crontab -e”명령어를 사용하고 있는 예를 보인 것입니다.



즉, crontab명령어를 사용가능토록 허용하고자 한다면 /etc/cron.allow파일에 사용자의 ID를 위와 같이 등록하면 된다는 것을 설명하고 있는 것입니다. 참고로 /etc/cron.allow파일이 존재한다면 root라 하더라도 이 파일에 root를 등록해야만 crontab설정이 가능합니다.


위의 경우와는 반대로 crontab명령어의 사용이 허용되어 있지 않는 sspark이라는 사용자가 crontab명령어를 실행했을 경우에는 “You (sspark) are not allowed to use this program (crontab)”이라는 메시지와 함께 crontab명령어가 허용되지 않음을 알 수가 있습니다.



앞서도 잠깐 언급하였지만 /etc/cron.allow파일과 /etc/cron.deny파일이 모두 존재하지 않는다면 오직 수퍼유저(root)만이 crontab 명령어의 사용이 가능하다는 것을 기억해 두시기 바랍니다.

4: “, , , , 요일, 실행명령”순으로 cron설정하는 방법



crontab명령어로 root나 일반사용자들의 개별적인 cron설정을 하는 구체적인 방법에 대해서 알아보도록 하겠습니다. cron설정을 실행하는 명령어에 대해서는 다음 내용에 구체적인 사례별로 설명되어 있으므로 참고하시고 여기서는 crontab명령어로 설정되는 내용들의 설정방법에 대해서 알아보도록 하겠습니다.



먼저 rootcron설정예를 보도록 하겠습니다.

뒤에서 설명하겠지만 rootcron설정을 확인하려면 root계정으로 “crontab -l”이라고 하시면 됩니다.






위의 root계정의 cron설정을 보면 각각의 행마다 숫자와 *, 그리고 명령어들로 구성되어 있는 것을 볼 수 있습니다. 위의 예에서 보신 바와 같이 root를 포함한 각 계정들의 cron설정내용은 다음과 같이 모두 6필드로 구성되어 있습니다.



설명을 위하여 위의 rootcron설정행 중 다음행을 참고로 하여 그 의미를 설명하도록 하겠습니다.



00 03 * * * su - root -c '/root/backup.sh' >& /dev/null


맨 앞의 “00”0분을 의미합니다.
그 뒤의 “03”03시를 의미합니다.
그 뒤의 “*”는 매일을 의미합니다.
그 뒤의 “*”는 매월을 의미합니다.
그 뒤의 “*”는 매주를 의미합니다.


그 뒤의 “su - root -c '/root/backup.sh' >& /dev/null”root계정으로 “/root/backup.sh >& /dev/null”을 실행하라는 의미합니다.

, 위의 행 내용을 종합적으로 해석해 보면 매월, 매주, 매일 0300분에 root계정으로 “su - root -c '/root/backup.sh' >& /dev/null”을 실행하라는 의미입니다. 참고로 /root/backup.sh파일은 매일 실행되는 시스템의 백업스크립트가 저장된 파일로서 일백업(daily backup)을 하기 위하여 필자가 만들어 놓은 스크립트파일입니다.



, 그럼 설정내용의 예에 대한 구체적인 사례를 보았으므로 cron으로 설정되는 각행들의 필드내용을 좀 더 구체적으로 설명해 보도록 하겠습니다.



첫번째 필드

(minutes)”을 의미. 0,1,2,3,,,59분까지 원하는 대로 설정가능.

두번째 필드

(hour)”를 의미. 0,1,2,3,,,23시까지 원하는 대로 설정가능.

세번째 필드

(day)”을 의미. 1,2,3,4,,,31일까지 원하는 대로 설정가능.

네번째 필드

(month)”을 의미. 1,2,3,4,,,12월까지 원하는 대로 설정가능.



다섯번째 필드

요일(weekday)”을 의미. 1,2,3,4,5,6,7중 하나로 설정가능.
(1:
월요일,2:화요일,3:수요일,4:목요일,5:금요일,6:토요일,7:일요일을 각각 의미함. 0도 일요일을 의미함.)

여섯번째 필드

실행될 명령어 내용



주의사항1 : “*”문자


각 필드에는 “*”문자가 올 수 있으며, 이는 각 필드에 해당하는 모든 숫자를 의미 합니다. 예를 들어 “일(day)”필드자리에 “*”로 설정되었다면 설정된 명령어가 매일 실행이 된다는 의미입니다.



주의사항 2 : 하이픈(“-”)문자


각 필드자리에 하이픈(“-“)문자가 올 수 있습니다. 예를 들어 일(day)필드자리에 “11-15”로 설정되어 있다면 11, 12, 13, 14, 15일을 의미합니다. 그리고 시간(hour)필드자리에 “1-5”로 설정되었다면 1, 2, 3, 4, 5시를 의미합니다.



주의사항 3 : 콤마(,)문자


각 필드자리에는 콤마(,)문자가 올 수 있습니다. 예를 들어 일(day)필드자리에 “1,11,21”로 설정되었다면 1, 11, 21일을 각각 의미합니다. 그리고 시간(hour)필드자리에 “3,6,9”로 설정되었다면 3, 6, 9시를 각각 의미합니다.




 

5: crontab으로 설정한 개별사용자의 cron설정, 파일로 확인하기


root를 비롯한 개별 사용자들의 cron설정만을 모아둔 디렉토리가 존재합니다. /var/spool/cron디렉토리에는 root와 개별사용자들의 cron설정이 계정명과 동일한 파일명으로 보관되어 있습니다. 이 디렉토리에 존재하는 파일의 내용은 각 계정사용자들이 자기의 cron설정을 확인하기 위하여 사용하는 “crontab -l”명령어의 결과와 동일한 것입니다.



다음은 현재 필자가 사용하고 있는 리눅스 서버의 /var/spool/cron디렉토리내의 파일들입니다.






위의 예를 보시면 /var/spool/cron디렉토리에는 bible, 그리고 root라는 파일이 존재하고 있습니다. , bible이라는 계정사용자의 cron설정파일이 bible이며 rootcron설정파일이 root라는 것을 알 수 있습니다.



이 두 파일의 내용을 살펴보도록 하겠습니다.

먼저 /var/spool/cron디렉토리내의 bible이라는 파일의 내용입니다.

이 파일의 내용은 bible계정으로 로그인하여 “crontab -l”의 결과와 동일하다는 것을 알아 두시기 바랍니다.






다음은 /var/spool/cron디렉토리내의 root라는 파일의 내용입니다.

이 파일의 내용은 root계정으로 로그인하여 “crontab -l”의 결과와 동일하다는 것을 알아 두시기 바랍니다.






위의 예들로 미루어 보면 “crontab -l”이란 명령어의 결과는 /var/spool/cron/ 디렉토리에서 해당계정사용자의 파일을 가져와서 보여주는 것임을 알 수 있습니다.



이렇듯 서버관리자는 특정명령어의 실행결과가 어떤 파일을 이용하여 출력되는 것인가를 알아둘 필요가 있습니다. 훌륭한 서버관리자가 되기위해서는 서버내부의 구석구석에 설정된 모든 설정들을 손바닥에 올려놓은 듯 훤하게 알고 있어야 합니다.









6: root권한으로 rootcron설정하는 방법


시스템관리자인 root는 시스템의 모든 cron설정을 수정, 변경, 삭제, 확인할 수 있습니다. 먼저, 시스템관리자인 수퍼유저(root) 자신의 cron설정하는 방법에 대한 설명입니다.



아래의 예는 root자신의 cron설정을 하기 위하여 root로 로그인 한 후에 “crontab -e”라는 명령어를 사용하여cron설정을 하는 내용입니다. “crontab -e”을 실행하면 /var/spool/cron/root파일의 내용을 vi로 불러와서 열어줍니다. 여기에서 vi모드와 동일한 방법으로 cron설정을 할 수 있습니다.






rootcron설정을 마무리하고 빠져 나가려면 vi에서와 마찬가지로 “wq!”라고 하면 됩니다. 이렇게 수정,변경되어 저장되는 내용은 /var/spool/cron/root파일에 저장됩니다.



여기서 설명하고자 하는 내용은 root

'개발은 핵찜이야 > 리눅스' 카테고리의 다른 글

Cent Os 5.5 설치  (0) 2012.04.13
리눅스 메일서버 설치  (0) 2012.04.13
리눅스 cp 활용  (0) 2012.04.13
CentOs 설치 방법 및 리눅스 설정  (0) 2012.04.13
PHP->MSSQL 연동위한 freetds  (0) 2012.04.13
Comments