crontab이란 무엇인가?
컴퓨터가 갖춘 가장 큰 장점 중 하나는 인간이 하기 싫어하는 지루하고 반복적인 작업을 불평 없이 처리한다는 점입니다. 매일 백업을 실행하는 것과 같은 단조로운 작업은 매일 정해진 시간에 자동으로 돌아가도록 예약해 두고, 우리는 더 의미 있는 일에 시간을 쓰는 것이 훨씬 효율적입니다. Linux와 Unix에는 기본적으로 "crontab" 유틸리티가 포함되어 있으며, 이 강력한 명령어를 사용하면 특정 시간에 작업을 예약하고 설정된 주기대로 반복 실행할 수 있습니다. crontab으로 예약된 작업은 "크론 잡(cron job)"이라고 부릅니다.
현재 등록된 크론 잡 확인하기
crontab 명령을 사용하면 서버에게 특정 월의 특정 날짜, 특정 분에 스크립트를 실행하도록 지시할 수 있습니다. 현재 시스템에 어떤 크론 잡이 설정되어 있는지 확인하려면 다음 명령을 실행합니다.
# crontab -l
시스템에 크론 잡이 설정되어 있다면 다음과 비슷한 출력이 표시됩니다.
0 6 * * * /opt/scripts/backup_script.sh
crontab 설정 구조 이해하기
위 설정은 매일 오전 6시에 셸 스크립트 "backup_script"를 실행하는 크론 잡입니다. 별표(*)는 해당 필드의 모든 값마다 실행하라는 의미입니다. 위 예제에서 일(day), 월(month), 요일(day of week) 필드의 별표는 매월 모든 날, 매년 모든 달, 매주 모든 요일에 실행하라는 뜻입니다. 첫 번째와 두 번째 필드는 0분, 6시, 즉 오전 6시에 스크립트를 실행하도록 지정합니다. 따라서 이 크론 잡은 "매일, 매월, 모든 요일의 오전 6시 0분에 /opt/scripts/backup_script.sh를 실행하라"는 의미가 됩니다.
crontab 설정의 전체 구조는 다음과 같습니다.
0 6 * * * /opt/scripts/backup_script.sh
| | | | |
| | | | |________________ 요일 (일요일=0)
| | | |__________________ 월
| | |____________________ 일
| |______________________ 시간
|________________________ 분
새 크론 잡 추가하고 편집하기
새 크론 잡을 예약하거나 기존 항목을 수정하려면 다음 명령을 실행합니다.
# crontab -e
편집기가 열리면 여기서 크론 잡을 자유롭게 추가, 수정 또는 삭제할 수 있습니다. 예를 들어 매주 월요일 오후 3시 45분에 작업을 실행하려면 다음과 같은 항목을 추가합니다.
45 15 * * 1 /opt/scripts/script.sh
쉼표(,)로 여러 값 지정하기
쉼표를 사용하면 하나의 필드에 여러 값을 지정할 수 있습니다. 하루 세 번, 8시간 간격으로 스크립트를 실행하고 싶을 때 특히 유용합니다. 단, 한 필드 안의 값들 사이에는 공백을 넣지 않도록 주의해야 합니다.
0 1,9,17 * 2,11 * /opt/scripts/db_backup_script.sh
위 예제에서 "db_backup_script.sh"는 2월과 11월의 매일 오전 1시, 오전 9시, 오후 5시에 실행됩니다. 이 방식은 일, 월, 요일 필드에서도 동일하게 적용할 수 있습니다.
특수 문자열 활용하기
crontab은 숫자뿐만 아니라 몇 가지 기본 영어 단어 형태의 특수 문자열도 지원합니다.
| 문자열 | 설명 |
|---|---|
| @reboot | 시스템이 재부팅될 때 한 번 실행 |
| @yearly | 매년 연초에 한 번 실행 |
| @annually | @yearly와 동일, 매년 한 번 실행 |
| @monthly | 매월 초에 한 번 실행 |
| @weekly | 매주 초에 한 번 실행 |
| @daily | 매일 자정에 한 번 실행 |
| @midnight | @daily와 동일, 자정에 실행 |
| @hourly | 매시간 시작 시점에 한 번 실행 |
예를 들어 매일 밤 자정에 스크립트를 실행하려면 crontab 설정을 다음과 같이 작성하면 됩니다.
@midnight /opt/scripts/script.sh
"0 0 * * *" 대신 "@midnight"를 사용해도 실행 결과는 완전히 같지만, 숫자 조합보다 훨씬 직관적이고 읽기 쉽다는 큰 장점이 있습니다.
하이픈(-)으로 범위 지정하기
하이픈을 사용하면 값의 범위를 지정할 수 있습니다. 아래 명령에서 "script.sh"는 오전 1시부터 6시까지 매시간 시작 시점에 실행됩니다.
0 1-6 * * * /opt/scripts/script.sh
마무리: crontab을 현명하게 사용하세요
cron으로 할 수 있는 일은 무궁무진합니다. 시스템 관리자라면 누구나 crontab을 필수 도구로 손꼽으며, 한번 익숙해지면 사용법이 쉽고 그만큼 강력합니다. 다만 잘못된 시간에 작업을 예약하면 때때로 심각한 문제를 일으킬 수 있으므로 반드시 신중하게 사용해야 합니다. crontab의 man 페이지(man crontab)를 직접 읽어보는 것을 적극 추천합니다. 또한 일회성 명령 예약에 사용되는 at 명령어도 함께 익혀두면 작업 자동화의 폭을 넓히는 데 큰 도움이 됩니다.