크론탭(Crontab)은 리눅스에서 정해진 시간에 스크립트나 데몬 등을 실행하는 스케줄러(Scheduler) 기능입니다.
특정 시간, 요일에 특정한 작업을 실행해야 하거나 반복 작업을 할 때, 예약된 시간에 특정 기능이 실행되어야 할 때 사용하는 자동화 시스템인 것인데요.
크론탭에서 스케줄을 알맞게 등록하면 리눅스를 관리할 때 수고를 덜 수 있고 특정 알림과 Log를 관리할 때 기본적으로 활용됩니다.
목차
크론탭 기본 사용법
크론탭을 사용하기 위해서는 root 또는 superuser 권한을 얻어야 합니다.
크론탭 편집 명령어
crontab -e
크론탭은 편집 화면에서 스케줄에 등록할 스크립트 또는 실행 파일과 동작할 시간을 작성해서 사용합니다.
크론탭을 설정하는 파일이 따로 있지 않고 위 명령어를 실행하면 vi 에디터 화면이 뜨는데, 여기서 크론 탭을 편집한 다음 :wq 명령어로 크론탭 설정을 저장합니다.
크론탭 목록 조회 명령어
crontab -l
편집 없이 크론탭에 작성된 내용을 조회하려면 위 명령어를 입력합니다. 그러면 cat 명령어처럼 크론탭에 등록된 목록이 프롬프트에 출력됩니다.
크론탭 삭제 명령어
crontab -r
리눅스에서 크론탭 파일 위치는 /var/spool/cron/crontabs
하위에 root 계정으로 생성된 파일로 저장됩니다. 하지만 시스템에 의해서 보호되기 때문에 root가 아니면 rm 명령어로는 삭제가 불가능합니다.
크론탭 삭제를 할 이유가 거의 없지만 전체 작업을 한번에 삭제 해야 한다면 위 명령어를 이용해 삭제할 수 있습니다.
크론탭 시간 설정
* * * * * 스크립트 경로
분(0~59) 시(0-23) 일(1~31) 월(1~12) 요일(0~7) /root/script.sh
크론탭은 별 5개로 크론탭이 실행될 시간을 설정하게 됩니다. 위 설명은 가독성을 위해 간격을 많이 띄웠지만 실제로 크롭탭에 작성하는 예제는 다음과 같습니다.
등록한 명령어 또는 스크립트가 정확한 분,시,일,월,요일에 실행되길 원한다면 숫자로 지정할 수 있으며 *로 지정하면 매번 실행됩니다.
요일은 0,7은 일요일이며 1은 월요일, 6은 토요일입니다.
0 7 * * 0 /usr/bin/letsencrypt renew >> /var/log/letsencrypt-renew.log
위 예제는 매일 7시 정각에 실행되는 스크립트로 일, 월, 요일이 *로 설정되어 있어서 매일 실행됩니다.
* * * * * /root/script.sh
위 예제는 script.sh 스크립트가 매 분에 실행됩니다.
반복 실행
0,30 1,13 * * * /root/script.sh
오전,오후 1시 정각, 30분에 걸쳐 실행하는 스크립트
간격 실행
0-10 20-23 * * 1-3 /root/script.sh
월요일에서 수요일, 20시에서 23시, 정각에서 10분 사이에 스크립트 실행
크론탭 시간 확인
date '+%F %r'
크론탭은 리눅스 시스템의 시간을 기준으로 동작하며 위 명령어로 시스템 시간을 확인할 수 있습니다.
크론탭 실행 테스트
크론탭의 시간을 설정했을 때 bad hour errors in crontab file 오류가 발생하거나 시간을 지정하는 것이 익숙하지 않은 사용자는 위 사이트에서 크론탭 문법을 미리 테스트해볼 수 있습니다.
크론탭 실행 명령어
크론탭 시작
service cron start
크론탭 중지
service scon stop
크론탭 재시작
우분투 : service cron restart
CentOS : service crond restart
크론탭 수정 후 수정된 내용을 적용하기 위해서 크론을 재시작 할 필요는 없습니다.
크론탭 작동 상태 확인
service scon status
크론이 작동 중인지 확인할 때 사용합니다.
크론탭 테스트
* * * * * env > /tmp/env.output
크론탭이 잘 작동하는지 테스트하기 위해서 위 스케줄을 크론탭에 등록합니다. 그리고 1분 후에 아래 명령어를 입력했을 때 내용이 출력되면 크론이 잘 작동하는지 테스트가 완료됩니다.
cat /tmp/env.output
SHELL=/bin/bash
PWD=/home/dlit
LOGNAME=dlit
HOME=/home/dlit
LANG=en_US.UTF-8
SHLVL=1
PATH=/usr/bin:/bin
_=/usr/bin/env
크론탭 로그 생성 및 확인
크론에 등록한 스크립트가 제대로 작동했는지 기록하기 위해서 로그를 남길 수 있습니다.
* * * * * /root/script.sh >> /var/log/crontab/run.log 2>&1
/root/script.sh 스크립트가 실행되면 출력된 결과가 /var/log/crontab/run.log에 로그 파일로 저장됩니다.
크론탭 백업
크론으로 다양한 작업을 저장했을 때 다른 서버에서 사용하거나 혹시 모를 상황에 대비하려면 백업을 하는게 좋습니다.
crontab -l > /home/crontab.bak
크론탭을 파일로 저장하는 명령어로 해당 파일을 저장해 뒀다가 크론탭을 실수로 삭제했거나 초기화 후 다시 세팅할 때 사용할 수 있습니다.