Print
카테고리: [ Operating System ]
조회수: 4584

1. crontab 기본 사용법

A) crontab -e

crontab을 편집 할 수 있다.

B) crontab -l

설정 된 crontab의 list를 확인 할 수 있다.

C) crontab -r

설정 된  crontab을 삭제한다...(조심하자)

 

2. crontab 설정(주기)

*           *             *           *           *
분(0~59)    시간(0~23)    일(1~31)    월(1~12)    요일(0~7)

*요일에서 0과 7은 일요일을 의미하고, 1~7은 월~토요일을 의미합니다.

예제를 보면 유용하게 사용할 수 있음을 알 수 있다.

A) 매 분마다 실행

* * * * * /home/userA/test.sh

 

B) 특정 시간에 실행

40 5 * * 6 /home/userA/test.sh

-> 매주 토요일(6) 5시 40분에 test.sh 실행

 

C) 반복해서 실행

10,30,50 * * * * /home/userA/test.sh

매일 시간마다 10분, 30분, 50분에 test.sh 실행

 

D) 범위로 실행

15-35 3 * * * /home/userA/test.sh

매일 3시 15분부터 35분까지 매분 test.sh 실행

 

E) 간격을 두고 실행

*/20 * * * * /home/userA/test.sh

매시간 20분마다 test.sh 실행

 

번외) logging

crontab의 결과를 로그로 남기고 싶을 때가 있을 텐데, 그럴 때는 익숙한 방법으로 로그를 남길 수 있다.

* * * * * /home/userA/test.sh > /home/userA/test.sh_cron.log

위와 같이 설정하면 매분 실행되는 test.sh의 표준 출력의 내용을 남길 수 있다. 이때 [ > ] 를 사용하면 매 분마다 해당 파일을 덮어쓰게 되고, [ > ] 대신 [ >> ] 를 사용하면 뒤로 이어서 입력이 된다.

*표준에러의 내용을 남기고 싶다면 뒤에 2>$1 을 붙이면 된다.

 

3. 주의사항

잘못 된 예시 옳은 예시

* * * * *

/home/userA/test.sh

* * * * * /home/userA/test.sh

예시에서 확인 가능하 듯이 한줄에 하나의 명령어만 기입해야 한다.

 

4. cron.hourly, cron.daily, cron.weekly, cron.monthly

/etc로 이동해서 crontab이외에 cron과 관련된 것들을 찾아보면 아래와 같은 것을 발견 할 수 있다.

(이미지는 사용중인 EC2 인스턴스에서 가져왔다)

 

위에서와 같이 특정 시간이나 요일을 지정해서 등록 할 수도 있고,

매시간마다 실행하고 싶다면 cron.hourly, 매일 실행하고 싶다면 cron.daily 이하에 스크립트를 넣어주고 실행권한(x)을 부여해주면 간단하게 설정이 가능하다. 

*다만 이는 root의 권한으로 실행 되기 때문에 사용을 추천하지는 않는다.. 

 

*anacron ??

/etc/cron.hourly이하에 0anacron 을 열어보면 매시 01분에 anacron을 실행하도록 되어 있음을 알 수 있다.

/var/spool/anacron 이하를 보면 cron.daily cron.monthly cron.weekly 등을 확인 할 수 있고, 이는 cron.* 들의 실행 날짜를 기록하고 있다.

anacron을 이를 체크하여 실행이 제때 안됐을 경우 아래와 같은 룰로  명령어를 실행해주는 역할을 한다.

(/etc/anacrontab을 보면 아래와 같은 설명을 볼 수 있는데, 이것을 보면서 통해 이해를 하면 좋을 것 같다.)

*******************************************************************************************************************************************************

#period in days   delay in minutes   

1                          5                        -> 매일 해당 줄의 명령어가 실행이 되었는지 확인 후, 실행된 적이 없다면 5분후에 명령어를 실행

 7                         25                      -> 매주 해당 줄의 명령어가 실행이 되었는지 확인 후, 실행된 적이 없다면 25분후에 명령어를 실행

*******************************************************************************************************************************************************

cron과 anacron의 차이점

 

<참고>

crontab과 함께 자주 거론되는 nohub도 알아 보았다.

nohub

[ & ] 를 사용하면 명령어를 백그라운드로 실행 시킬 수 있지만 로그아웃 후에도 계속해서 실행 시키고 싶은 경우 nohub을 사용할 수 있다.

(즉, 데몬의 형태로 실행 시킬 수 있다.)

사용법은 아래와 같이 간단하다.

nohub /home/userA/test.sh

-> nohub을 실행하면 자동으로 실행 위치에 nohub.out이 생기고 출력문자열이 저장 된다. 

주의사항으로는 nohup으로 실행할 쉘스크립트파일 (*.sh)은 현재 퍼미션이 755 이상 상태이어야 한다.

nohub의 종료는 PID를 사용해 kill 을 수행해야 한다..