리눅스서버

리눅스 예약 실행 스케줄러 crontab

매번 백업하기 귀찮다. 정기적으로 일정시간마다 데이터를 백업할 수 없을까? 그것도 자동으로..


있습니다. 리눅스에는 일정시간마다 자동으로 명령을 실행해주는 스케줄러가 존재한답니다. 예약된 시간에 정확히 프로그램이나 명령을 실행해주는 존재.. 바로 crontab 이라고 합니다.


crontab은 리눅스의 전통적인 서비스인데... 늘 상주해있다가 스케줄러에 있는 시간이 되면 정해진 명령을 실행해줍니다. 예로 든 백업뿐만 아니라 이걸 이용하면 예약 메일보내기도 가능하죠..


1. crontab 살펴보기

등록한 스케줄 파일은 /var/spool/cron 에 있습니다. 계정별로 스케줄 파일들이 정리되어있죠.. 다른 일반계정에서도 스케줄 등록을 할 수 있으니까요. 


예를 들어, /var/spool/cron/root 파일에는 root 계정에서 등록한 스케줄이 있습니다.



2. 스케줄 목록 확인

crontab에 있는 스케줄 확인 명령어는 다음과 같습니다.


# crontab -l


* "no crontab" 이라고 뜬다면 등록된 스케줄이 없다는 뜻입니다.



3. 스케줄 등록/수정/삭제

아래 명령어를 실행하면 빈 vi 에디터가 뜨는 데.. 스케줄을 한줄씩 입력하고, 저장(:wq)하면 스케줄이 자동으로 등록됩니다. 서비스 재시작없이 저장만 하면 "crontab: installing new crontab" 메세지가 뜨면서 스케줄이 등록됩니다.


참고로 서비스는 service crond restart 또는 systemctl restart crond.service 명령으로 재시작할 수 있습니다.


# crontab -e


스케줄 수정과 삭제도 마찬가지로 vi 에디터에서 스케줄 수정/삭제후 저장만 하면 됩니다.



4. 스케줄 형식

스케줄은 아래와 같은 형식을 하고 있습니다.


   .---------------- 분 - 범위 : 0-59

   |  .------------- 시 - 범위 : 0-23 (자정이 0)

   |  |   .---------- 일 - 범위 : 1-31

   |  |   |   .------- 달 - 범위 : 1-12 또는 jan,feb, mar, apr ... 축약형 영문 월 표시

   |  |   |   |  .---  요일 - 범위 : 0-6 (일요일은 0 또는 7) 또는 sun, mon, tue, wed thu, fri, sat

   |  |   |   |  |

# *  *  *  *  * [실행될 명령어]


@ 범위 지정에 사용할 수 있는 연산자


1.  * 

해당 범위 모두 수행하게 된다.


매분 마다 실행되게 하고 싶다. -> * * * * *

매 시간 정각에 실행되게 하고 싶다. -> 0 * * * * 

매 일 오전 03시에 실행되게 하고 싶다 -> 0 3 * * *

매 달 25일 자정에 실행되게 하고 싶다 -> 0 0 25 * *

매 해 1월 1일 오후 2시에 실행되게 하고 싶다 -> 0 14 1 1 *

매 주 화요일 오전 03시 30분에 실행되게 하고 싶다. -> 30 3 * * 2

 

2.  - 

해당 구간은 모두 수행하게 된다.

 

매 시간 10분에서 30분까지 매 분마다 실행되게 하고 싶다 -> 10-30 * * * *

오후 7시에서 11시까지 매 시간마다 실행되게 하고 싶다 -> 0 7-11 * * *

매 월 20일에서 28일까지 자정에 실행되게 하고 싶다 -> 0 0 20-28 * *

매 해 3월에서 6월까지 1일 오전 03시 30분에 실행되게 하고 싶다 -> 30 3 1 3-6 *

평일 오전 03시에만 실행되게 하고 싶다 -> 0 3 * * 1-5 

 

3.  ,

특정 시간대에만 수행하게 된다.


10분, 30분 -> 10, 30 * * * *

오전 4시 오후 4시 정각 -> 0 4, 16 * * *

매 월 1일 15일 자정 -> 0 0 1, 15 * *

매 년 5월 11월 1일 정오 -> 0 12 1 5,11 *

월, 수, 금 오후 2시 30분 -> 30 2 * * 2,4,6

 

4.  /

주기적으로 호출한다.


*/5 * * * *  -> 매 시간 5분 마다 실행

0 */2 * * * -> 매 2시간마다 정각에 실행



예시)

아래는 제가 사용하고 있는 한 스케줄입니다. 바로 1시간마다 서버시간을 동기화해주는 명령을 실행시켜주는 스케줄입니다. 시간이 갈수록 서버시간이 이상하게 오차가 나더라고요.. 그래서 등록한 스케줄입니다.


1 * * * * rdate -s time.bora.net && clock -w


매시 1분에 시간으로 동기화해주도록 하고 있습니다.

?

서버에 요청 중입니다. 잠시만 기다려 주십시오...