Linux Crontab(리눅스 크론탭) 사용법
crontab은 주기적으로 특정 작업을 실행해야 하는 경우에 유용하게 쓰입니다.
윈도우 운영체제 에서의 스케줄러와 같은 역할을 합니다.
1. crontab 은 어떤 경우에 사용하나요?
ex)
매일 자정에 오래된 로그 파일을 삭제해야할 때
1시간 간격으로 서버의 디스크 사용량을 운영자에게 메일로 보내야할 때
매주 월요일에 특정 디렉토리를 백업하고 싶을 때
2. crontab 설정 방법
주기적으로 작업을 수행하기 위한 설정 파일을 crontab이라고 합니다.
crontab 파일의 위치는 OS별로 차이가 있기 때문에 파일을 직접 수정하지 않고 crontab 명령어를 이용해서 추가/변경/삭제를 합니다.
① crontab 편집
$ crontab -e
위와 같이 입력하면 crontab 명령어 입력을 위한 텍스트 에디터가 실행됩니다.
에디터에 crontab 명령어를 입력후 콜론(:) 입력 후에 wq 를 입력해 crontab을 갱신합니다.
② crontab 목록 조회
$ crontab -l
cat 명령어로 파일을 읽어들인 것처럼 표준 출력으로 현재 등록된 crontab 목록이 콘솔에 출력됩니다.
③ crontab 삭제
$ crontab -r
crontab -e을 통해 편집해도 되지만, 현재 사용자의 모든 crontab을 삭제하고 싶다면 위의 명령어를 사용하면 됩니다.
3. crontab 주기 설정
* * * * *
분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)
각 별 위치에 따라 주기를 다르게 설정 할 수 있습니다. 순서대로 분-시간-일-월-요일 순입니다.
그리고 괄호 안의 숫자 범위 내로 별 대신 입력 할 수 있습니다.
요일의 경우 0 일요일, 1 월요일, 2 화요일, 3 수요일, 4 목요일, 5 금요일, 6 토요일, 7 일요일입니다.
4. crontab 예제
쉘에서 "crontab -e"를 통해 편집기가 열려있는 상태인 것으로 가정합니다.
crontab을 설정할 때 한 줄에 하나의 명령만 쓸 수 있습니다. (줄바꿈 문자가 들어가면 안됩니다.)
① 매 1분마다 실행
# 매 1분마다 test.sh 실행
* * * * * /root/script/test.sh
② 매 30분마다 실행
# 매 30분마다 test.sh 실행
*/30 * * * * /root/script/test.sh
③ 매일 새벽 2시에 실행
# 매일 새벽 2시에 test.sh 실행
0 2 * * * /root/script/test.sh
④ 매주 월요일~금요일 오전 6시에 실행
# 매주 월요일~금요일 오전 6시에 실행 test.sh 실행
0 6 * * 1-5 /root/script/test.sh
⑤ 매 30분마다 작업 결과를 파일에 로깅
# 매 30분마다 test.sh 실행 결과를 log.txt에 로깅
*/30 * * * * /root/script/test.sh >> log.txt
⑥ 특정시간 실행
# 매주 금요일 오전 5시 45분에 test.sh 를 실행
45 5 * * 5 /root/script/test.sh
⑦ 반복 실행
# 매일 매시간 0분, 20분, 40분에 test.sh 를 실행
0,20,40 * * * * /root/script/test.sh
⑧ 범위 실행
# 매일 1시 0분부터 30분까지 매분 tesh.sh 를 실행
0-30 1 * * * /root/script/test.sh
⑨ 간격 실행
# 매 10분마다 test.sh 를 실행
*/10 * * * * /root/script/test.sh
⑩ 복잡하게 실행
# 5일에서 6일까지 2시,3시,4시에 매 10분마다 test.sh 를 실행
*/10 2,3,4 5-6 * * /root/script/test.sh
주기 입력 방법엔 *, -, / 을 이용하는 방법이 있습니다.
위에서 보셨듯이 각각의 특수기호가 하는 기능이 다르고 조합을 어떻게 하느냐에 따라 필요한 주기를 설정 할 수 있습니다.
4. crontab 사용 팁
① 한 줄에 하나의 명령만 씁니다.
# 잘못된 예
* * * * *
/root/script/test.sh
# 잘된 예
* * * * * /root/script/test.sh
② 주석을 달아 봅시다.
# 주석
#---------------------------------------------------------------------------------------------------------------------------------------
# 맨 앞에 #을 입력하면 그 뒤로 나오는 모든 문자는 주석으로 처리 할 수 있습니다.
#---------------------------------------------------------------------------------------------------------------------------------------
③ 로그(log)을 꼭 남겨 둡니다.
# 예
*/20 * * * *
/root/script/test.sh >> /var/log/test_status.log 2>&1
* * 1 * * rm -rf /var/log/test_status.log 2>&1
로그(log)가 많이 쌓이면, 서버 내의 저장공간이 부족하게 되어 서버의 다운 또는 비정상적인 동작을 보일 수 있으니 주기적으로 삭제해야 합니다.
④ 작성한 crontab을 백업합니다.
혹시라도 crontab -r을 쓰거나 실수로 crontab 디렉토리를 삭제하게 된다면 기존 cron(크론) 내역들이 모두 삭제됩니다.
이런 혹시나 하는 경우를 대비해서 주기적으로 crontab을 백업해 둡니다.
crontab -l > /home/bak/crontab_bak.txt
이렇게 쉘 상에서 치시게 되면 crontab의 내역을 txt파일로 저장하게 됩니다.
# 밤 12시 0분에 자동으로 crontab 백업 실행
0 0 * * * crontab -l > /home/bak/crontab_bak.txt
위 처럼 crontab에 추가 해 두면 자동으로 crontab 백업 실행하게 됩니다.