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의 차이점
- cron은 복수의 위치에서 설정이 가능하지만 anacron은 /etc/anacrontab에서만 설정이 가능하다.
- cron은 권한을 주면 다양한 유저로 설정이 가능하지만 anacron은 오직 root만 작업설정이 가능하다.
- cron은 데몬의 형태로 프로세스가 상주(crond)하지만 anacron은 데몬의 형태가 아닌 정기적으로 명령어를 실행하도록 되어있다.(cron.hourly/0anacron)
- anacron을 사용하면 장시간 서버가 정지된 경우에도 다시 기동 후 바로 필요한 작업을 수행할 수 있다.
<참고>
crontab과 함께 자주 거론되는 nohub도 알아 보았다.
nohub
[ & ] 를 사용하면 명령어를 백그라운드로 실행 시킬 수 있지만 로그아웃 후에도 계속해서 실행 시키고 싶은 경우 nohub을 사용할 수 있다.
(즉, 데몬의 형태로 실행 시킬 수 있다.)
사용법은 아래와 같이 간단하다.
nohub /home/userA/test.sh
-> nohub을 실행하면 자동으로 실행 위치에 nohub.out이 생기고 출력문자열이 저장 된다.
주의사항으로는 nohup으로 실행할 쉘스크립트파일 (*.sh)은 현재 퍼미션이 755 이상 상태이어야 한다.
nohub의 종료는 PID를 사용해 kill 을 수행해야 한다..