리눅스와 유닉스에서 "일정한 시간마다 일을 처리해 주는 것"이라면 떠오르는 바로 그것, crontab
. 시스템이 알아서 반복 작업을 해주니 얼마나 든든한가! 하지만 잘 모르면 골치 아픈, 그래서 천사와 악마를 동시에 품고 있는 존재기도 하다. 내가 몇 번이고 crontab
과 씨름하면서 깨달은 내용을 토대로, crontab
이 뭔지, 어떻게 쓰는지, 그리고 몇 가지 활용 팁을 공유해 본다.
crontab의 정체는 무엇인가?
crontab
은 쉽게 말해 리눅스와 유닉스 시스템에서 "어떤 작업을 자동으로, 정기적으로 실행하도록 예약해 두는" 도구다. 이 설정을 통해 나는 매일, 매주, 매달 반복되는 지루한 작업을 손쉽게 처리할 수 있다. 설정만 해두면 나 대신 무지성으로 작업을 처리해 주니, 시스템이 마치 내 개인 비서가 된 것 같은 기분이다.
이 모든 걸 가능케 해주는 건 바로 cron 데몬이다. cron 데몬은 crontab
파일에 기록된 내용을 확인하며 지정된 시간마다 명령어를 실행하는데, 이게 바로 내가 crontab
을 즐겨 사용하는 이유다.
crontab 명령어가 뭔지 알아보자
crontab
에는 몇 가지 유용한 명령어들이 있다. 이를 잘 알아두면 시간을 절약할 수 있을 뿐만 아니라, 간편하게 설정을 확인하고 수정할 수 있다.
- crontab -e :
crontab
파일을 열어 작업을 추가하거나 수정할 수 있는 명령어다. - crontab -l : 현재 사용자의
crontab
파일 내용을 보여 준다. - crontab -r : 현재 사용자의
crontab
파일을 삭제한다. (조심스럽게 다룰 것)
crontab 파일 형식은 어떤 모습일까?
crontab
파일은 매 작업마다 한 줄로 구성되며, 각 줄은 다섯 개의 시간 필드와 하나의 명령어로 이루어져 있다. 필드가 무슨 뜻인지 처음 보면 이게 뭔가 싶은데, 하나씩 보면 의외로 간단하다.
* * * * * /path/to/command
- - - - -
| | | | +----- 요일 (0 - 7) (일요일이 0 또는 7)
| | | +------- 월 (1 - 12)
| | +--------- 일 (1 - 31)
| +----------- 시 (0 - 23)
+------------- 분 (0 - 59)
각 필드에는 숫자나 *
이 들어가는데, *
은 모든 값을 의미한다. 예를 들어 * * * * *
은 "매 분, 매 시간, 매 일, 매 달, 매 요일에 실행하라"는 뜻이다. 한마디로 매 분마다 돌아간다. 이를 적절히 응용하면 정말 다양한 스케줄링이 가능하다.
5분마다 작업 실행: 예시로 알아보는 crontab
예를 들어 */5 * * * * /path/to/myscript.sh
라는 명령어가 있다고 하자. 이 설정은 myscript.sh
라는 스크립트를 매 5분마다 실행하라는 뜻이다.
*/5
: 매 5분마다*
: 모든 시간을 의미*
: 모든 날을 의미*
: 모든 달을 의미*
: 모든 요일을 의미
즉, 하루 24시간 동안 매 5분마다 이 스크립트가 실행된다. 신경 쓸 필요 없이 주기적으로 돌게 만들어 두었으니, 생각만 해도 편리하다!

다양한 활용 예시
다양한 상황에 맞게 crontab
을 설정할 수 있다. 몇 가지 예시를 통해 어떻게 사용할 수 있는지 살펴보자.
- 매 시간마다 스크립트 실행
0 * * * * /path/to/script.sh
매 정시 0분마다 스크립트를 실행한다. 예를 들면, 12:00, 13:00, 14:00… - 매일 오전 3시에 백업 작업 실행
0 3 * * * /path/to/backup.sh
매일 새벽 3시에 백업을 실행해 두면 야근할 일이 줄어들지도 모른다. - 매월 1일과 15일 오전 2시에 실행
0 2 1,15 * * /path/to/script.sh
중요한 일을 매달 초와 중순에 반복적으로 실행해 두는 것도 좋다. - 주말에만 실행
30 8 * * 6,7 /path/to/weekend_script.sh
매주 토요일과 일요일 오전 8시 30분에 스크립트를 실행하는 설정이다.
crontab 설정 시 알아 두면 좋은 사항
리눅스에서 crontab
작업은 시스템이 재부팅된 후에도 유지된다. 하지만 한 가지 주의할 점이 있는데, 만약 시스템이 꺼져 있는 시간에 예약된 작업이라면 실행되지 않는다. 예를 들어 매일 오후 3시에 실행하도록 했는데, 시스템이 꺼져 있다가 4시에 켜진다면 그날 오후 3시 작업은 그냥 넘어간다.
이런 문제를 해결하려면 anacron이라는 친구를 쓸 수 있다. anacron은 시스템이 꺼져 있어도 "놓친 작업"을 실행해 주는 도구다. crontab
의 한계를 보완해 주기 때문에, 일정한 주기로 무조건 실행돼야 하는 작업이 있을 때 사용하면 유용하다.
crontab
을 잘 활용하면 나에게 큰 도움이 된다. 시간 스케줄링을 통해 중요한 작업을 자동화하면 시간을 절약할 수 있을 뿐만 아니라, 실수도 줄일 수 있다. 물론 처음에는 형식 때문에 어려워 보일 수 있지만, 한번 익숙해지면 헤어나오기 힘든 편리함이 기다리고 있다. 이 글을 읽고 crontab
의 세계에 발을 들여보는 건 어떨까?
Add a New Comment