Cron은 모든 리눅스 배포판을 포함한 유닉스 계열 시스템의 작업 스케줄러입니다. cron 데몬은 호스트에서 백그라운드로 상시 실행되며, 지정된 일정에 따라 예약된 작업을 자동으로 수행합니다. 이 글에서는 CentOS 또는 RHEL 리눅스 서버에 cron을 설치하는 방법, cron 문법을 익히고 crontab으로 작업을 예약하는 방법까지 단계별로 살펴보겠습니다.
CentOS/RHEL 리눅스에 Cron 설치하기
기본적으로 cron은 RHEL이나 CentOS 설치 직후부터 바로 사용할 수 있습니다. 만약 어떤 이유로 설치되어 있지 않다면 yum 또는 dnf 명령으로 기본 저장소에서 간단히 설치할 수 있습니다.
# dnf update -y — 호스트의 모든 패키지를 최신 상태로 업데이트# dnf install crontabs -y — cron 설치
설치가 완료되면 crond 데몬을 활성화하고 시작합니다.
# systemctl enable crond.service
# systemctl start crond.service
Crontab으로 Cron 작업 추가하기
다음 명령어로 cron에 작업을 추가할 수 있습니다.
# crontab -e
이 명령을 실행하면 기본 텍스트 편집기(저의 경우 vim이지만, 원하신다면 nano 등 더 편리한 편집기로 변경 가능합니다)로 해당 사용자의 작업 파일이 열립니다. 이 방식으로 작업을 구성하면 문법 오류를 방지할 수 있으며, 오류가 포함된 설정 파일은 crontab이 저장을 허용하지 않습니다.
mc(Midnight Commander)에서 cron 작업 파일을 직접 수정할 수도 있습니다.
# mcedit /var/spool/cron/root — 파일명은 사용자에 따라 다를 수 있습니다.
bash 스크립트를 매 분마다 실행하는 간단한 작업을 추가해 보겠습니다.
# crontab -e
파일이 열리면 아래와 같이 실행 주기와 스크립트 경로를 입력합니다.
* * * * * /root/test.sh
vim과 동일하게 Ctrl+O로 파일을 저장하고 Ctrl+X로 종료합니다.
정상적으로 입력했다면 작업이 cron에 등록됩니다. 등록된 cron 작업 목록은 다음 명령으로 확인할 수 있습니다.
# cat /var/spool/cron/root
* * * * * /root/test.sh
또는 아래 명령을 사용해도 됩니다.
# crontab -l
Cron 스케줄 문법 이해하기
cron 데몬은 1분마다 작업 목록을 한 번씩 검사하며, 다음 파일과 디렉터리를 확인합니다.
/etc/crontab /etc/cron.*/. /var/spool/cron/
각 crontab 스케줄 항목은 5개의 필드로 구성됩니다.
minutes hours day_of_a_month months week_day # 작업 정의 예시: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
각 필드에 사용할 수 있는 유효한 값은 다음과 같습니다.
| 필드 | 값 범위 |
| 분 (Minutes) | 0-59 |
| 시 (Hours) | 0-23 |
| 일 (Day of month) | 1-31 |
| 월 (Month) | 1-12 또는 jan feb mar apr may jun jul aug sep oct nov dec |
| 요일 (Week day) | 0-6 (0은 일요일) 또는 sun mon tue wed thu fri sat |
* 문자는 해당 필드의 모든 허용 값을 의미합니다. 예시 작업을 하나 살펴보겠습니다.
30 00 * * 1 /root/test.sh
이 작업의 스크립트는 매주 월요일 새벽 0시 30분에 실행됩니다.
특수 문자로 스케줄 간결하게 작성하기
cron 파일의 문법을 더 쉽게 작성할 수 있도록 몇 가지 특수 문자가 제공됩니다.
- 콤마(,): 서로 다른 시간에 동일한 작업을 실행할 때 값을 구분하는 용도입니다. 예를 들어 매시간 15분과 30분에 작업을 실행하려면 다음과 같이 설정할 수 있습니다.
15 * * * * 30 * * * *
콤마를 사용하면 더 짧은 문법으로 표현할 수 있습니다.
15,30 * * * *
- 슬래시(/): 작업 반복 주기를 지정할 때 사용합니다. 예를 들어 2시간마다 작업을 실행하려면 슬래시를 사용해 cron 파일 내용을 훨씬 짧게 만들 수 있습니다.
* */2 * * *
- 하이픈(-): 필드 내 값의 범위를 나타냅니다. 매시간 처음 10분 또는 마지막 10분 동안 작업을 실행하려면 하이픈으로 범위를 지정합니다.
0-10 * * * * 50-60 * * * *
추가적인 cron 스케줄 예시는 다음과 같습니다.
- 평일 낮 12시와 오후 6시에 실행:
0 12,18 * * 1-5 - 30분마다 실행:
*/30 * * * * - 매주 토요일에 실행:
0 0 * * 6 - 매주 화요일과 목요일 새벽 2시에 실행:
0 2 * * 2,4
Cron 특수 변수 활용하기
cron에서는 편의를 위해 특수 변수도 사용할 수 있습니다.
| 변수 | 설명 | 동등한 문법 |
@reboot |
부팅 시 한 번 실행 | |
@yearly 또는 @annually |
1년에 한 번 | 0 0 1 1 * |
@monthly |
매월 한 번 | 0 0 1 * * |
@weekly |
매주 한 번 | 0 0 * * 0 |
@daily |
매일 한 번 | 0 0 * * * |
@hourly |
매시간 한 번 | 0 * * * * |
@midnight |
자정에 실행 |
예를 들어 매일 작업을 실행하려면 다음과 같은 cron 문법을 사용할 수 있습니다.
@daily echo "Cron check"
다른 사용자의 crontab 파일도 편집할 수 있습니다.
# crontab -u username
Cron 실행 결과를 이메일로 받기
crontab 작업 실행 정보를 이메일로 수신하려면 cron 파일에 관련 설정을 추가해야 합니다. 이메일 발송을 위해서는 서버에 메일 에이전트가 설치되어 있어야 합니다. 테스트를 위해 저는 리눅스 호스트에 sendmail을 설치했습니다.
# dnf install sendmail -y
# service sendmail start
이제 cron 파일에 이메일 발송 관련 파라미터를 설정합니다. 파일에 다음 줄을 추가하세요.
MAILTO="youremail@gmail.com" SHELL=/bin/bash HOME=/ * * * * * echo "Cron check"
SHELL — 사용자 셸을 지정합니다.
HOME — cron 파일의 경로를 지정합니다.
이렇게 설정하면 cron 작업이 실행될 때마다 지정한 메일함으로 알림 이메일이 발송됩니다.
cron 작업 실행 정보를 로그 파일에 기록할 수도 있습니다. 작업 끝에 >>를 추가하고 로그 파일 경로를 입력하면 됩니다.
* * * * * echo "Cron check" >> /var/log/admin/journal.log
crontab 파일에 작업이 많고 그중 일부 결과는 이메일로 받고 싶지 않다면, 해당 작업을 무음(silent) 모드로 실행하면 됩니다.
* * * * * echo "Cron check" >> /dev/null 2>&1
Cron 설정 파일과 로그
cron의 기본 설정 파일은 /etc/crontab입니다. 이 파일 외에도 다음 디렉터리에 스크립트를 두면 주기적으로 작업을 실행할 수 있습니다.
- /etc/cron.daily — 하루에 한 번 스크립트 실행
- /etc/cron.hourly — 한 시간에 한 번 실행
- /etc/cron.monthly — 한 달에 한 번 실행
- /etc/cron.weekly — 일주일에 한 번 실행
스크립트 파일을 해당 디렉터리 중 하나에 넣기만 하면 지정된 주기에 따라 자동으로 실행됩니다.
/etc/cron.allow와 /etc/cron.deny 파일을 사용하면 스케줄러 접근 권한을 제한할 수 있습니다. 이 파일들을 생성하고 cron 작업 실행을 허용하거나 차단할 사용자를 추가하기만 하면 됩니다.
/etc/crontab 파일에도 작업을 추가할 수 있으며, 이 파일은 보통 root 사용자나 시스템 작업 설정에 사용됩니다. 개인 사용자의 cron 작업 파일은 /var/spool/cron/ 또는 /var/cron/tabs/ 디렉터리에 저장됩니다.
cron 작업이나 오류를 추적하려면 로그 파일인 /var/log/cron을 확인하세요. 이 파일에는 모든 작업 기록과 데몬 동작 중 발생한 오류가 기록됩니다.