crontab
유닉스/리눅스 운영체제에서 사용하는 시간 기반 job 관리 스케줄러이다. 반복적인 작업을 실행하는 가장 기본적인 프로그램이다. 아래 그림은 cron을 사용하는 방법을 요약한 내용이다.
# * * * * * command to execute
# ┬ ┬ ┬ ┬ ┬
# │ │ │ │ │
# │ │ │ │ └───── day of week (0 - 7)
# │ │ │ └───────── month (1 - 12)
# │ │ └───────────── day of month (1 - 31)
# │ └───────────────── hour (0 - 23)
# └───────────────────── min (0 - 59)
출처: https://blog.nexcess.net/2014/02/06/cron-job-for-every-three-days/
‘분시일월요’ 형식으로 시간이 입력되고 그 다음 실행파일을 적어주면 된다. 매우 간단하지만 몇가지 주의사항이 있다. 주의사항과 예시를 참고하여 사용하도록 하자.
사용시 주의사항
- 한줄에 하나의 명령만 쓴다.
* * * 5 5 /home/script/test.sh
- 시스템 환경변수 설정을 참조하지 않기 때문에 쉘스크립트 상에 첨부하거나 실행파일의 경우 아래와 같이 설정을 한다! (이러한 설정을 하지 않으면 크론이 job을 실행하지만 실제 프로그램이 구동되지 않을 수 있다.)
크론탭 설정 맨 위에 아래 내용을 추가한다.
[USER]$ crontab -e
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
LD_LIBRARY_PATH=/usr/local/lib
HOME=/
...
* * * * * ...
- 특수문자 %에 주의한다!
date 명령어의 +%Y%m%d%H%M%S와 같은 옵션에서 %는 크론탭에서 다음줄을 의미하기 때문에 이 옵션 사용시 반드시 '\'를 넣어서 구분해 준다.
0 0 * * * /some/job > ~/log/job_`date +\%Y\%m\%d\%H\%M\%S`.log 2>&1
- stdout 출력은 사용자의 메일로 보내진다.
특별한 설정이 없는 경우 standard output(명령 실행시 사용자의 터미널에 출력되는 내용)은 사용자의 메일로 보내진다. 로그를 남기기 위해서는 redirection을 사용하여 로그파일에 저장해야 한다.
읽어보기)
https://www.jefframnani.com/writing-a-good-cron-job/
https://www.endpoint.com/blog/2008/12/08/best-practices-for-cron
예시
# 매분 test.sh 실행
* * * * * /home/script/test.sh
# 매주 금요일 오전 5시 45분에 test.sh를 실행
45 5 * * 5 /home/script/test.sh
# 매일 매시간 0분, 17분, 38분에 test.sh를 실행
0,17,38 * * * * /home/script/test.sh
# 매일 1시 0분부터 30분까지 매분 tesh.sh를 실행
0-30 1 * * * /home/script/test.sh
# 매 10분마다 test.sh를 실행
*/10 * * * * /home/script/test.sh
# 매시 6분을 시작으로 10분 간격으로 test.sh를 실행
6-59/10 * * * * /home/script/test.sh
# crond 재시작 방법
[root]# service crond restart
또는
[root]# systemctl restart crond
# 모든 사용자의 crontab 확인 방법 /var/spool/cron 디렉토리 안에 사용자 이름 파일로 확인 가능
# 시스템 job 확인 방법 아래 디렉토리에서 확인 가능
/etc/cron.d
/etc/cron.hourly
...
결론
cron은 유닉스/리눅스 운영체제에서 주기적인 작업을 자동화하는 데 유용한 도구입니다. 하지만 사용 시 몇 가지 주의사항을 지켜야 합니다. 한 줄에 하나의 명령만 쓰고, 시스템 환경변수를 직접 설정해야 하며, 특수문자 %는 이스케이프 처리해야 합니다. stdout 출력은 사용자 메일로 전송되므로 로그 파일 리다이렉션이 필요합니다. 다양한 cron 예제를 통해 매분, 매시간, 매일, 특정 간격 등 원하는 패턴으로 작업 스케줄링이 가능합니다. 마지막으로 사용자별 crontab과 시스템 cron 작업을 확인하는 방법도 숙지하면 좋습니다. 주의사항을 지키고 예제를 참고하여 cron을 적절히 활용한다면 주기적 작업 자동화에 많은 도움이 될 것입니다.
참고
http://forum.falinux.com/zbxe/index.php?document_srl=557396&mid=lecture_tip
https://blog.nexcess.net/2014/02/06/cron-job-for-every-three-days/
댓글 없음:
댓글 쓰기