전체 글 (503)
방명록
- [Linux] 크론(Cron) 표현식 완벽 가이드: 자동화 작업 스케줄링 마스터하기2025년 03월 19일 11시 12분 20초에 업로드 된 글입니다.이 글은 2025년 03월 19일 02시 16분 25초에 마지막으로 수정되었습니다.작성자: DandyNow728x90반응형
크론(Cron) 표현식 완벽 가이드: 자동화 작업 스케줄링 마스터하기
크론(Cron)은 유닉스 계열 운영체제에서 특정 작업을 정해진 시간에 자동으로 실행하도록 예약하는 시간 기반 작업 스케줄러이다. 크론 표현식을 이해하면 시스템 관리, 데이터 백업, 정기적인 알림 등 다양한 작업을 자동화할 수 있다. 이 글에서는 크론 표현식의 모든 것을 상세히 설명하고, 다양한 예시와 활용법을 제공한다.
1. 크론 표현식의 구조
크론 표현식은 공백으로 구분된 5개 또는 6개의 필드로 구성된다. 각 필드는 특정 시간 단위를 나타내며, 순서는 다음과 같다.
- 초 (Seconds): 0부터 59 사이의 값
- 분 (Minutes): 0부터 59 사이의 값
- 시간 (Hours): 0부터 23 사이의 값
- 일 (Day of Month): 1부터 31 사이의 값
- 월 (Month): 1부터 12 사이의 값 또는 영문 약자 (JAN, FEB, MAR 등)
- 요일 (Day of Week): 0부터 7 사이의 값 (0과 7은 일요일) 또는 영문 약자 (SUN, MON, TUE 등)
2. 특수 문자
크론 표현식에서는 다음과 같은 특수 문자를 사용하여 다양한 시간 간격을 설정할 수 있다.
- 별표 (*): 해당 필드의 모든 값을 의미(예: 매분, 매시간)
- 슬래시 (/): 값의 범위를 설정(예:
*/5
는 5분마다) - 콤마 (,): 여러 값을 나열(예:
1,3,5
는 1일, 3일, 5일) - 하이픈 (-): 값의 범위를 지정(예:
9-17
은 9시부터 17시까지) - 물음표 (?): 특정 필드를 지정하지 않음을 의미하며, 주로 '일'과 '요일' 필드에서 사용
- L: '일' 또는 '요일' 필드에서 사용되며, 마지막 날 또는 마지막 요일을 의미
- W: '일' 필드에서 사용되며, 가장 가까운 평일을 의미
- #: '요일' 필드에서 사용되며, 특정 요일의 몇 번째 주를 의미
3. 크론 표현식 필드 정보
필드 허용 범위 허용된 특수 문자 설명 초 (Seconds) 0-59 *
,,
,-
,/
작업을 실행할 초
를 지정분 (Minutes) 0-59 *
,,
,-
,/
작업을 실행할 분
을 지정시간 (Hours) 0-23 *
,,
,-
,/
작업을 실행할 시간
을 지정일 (Day of Month) 1-31 *
,,
,-
,/
,L
,W
,?
작업을 실행할 날짜
를 지정월 (Month) 1-12 또는 JAN-DEC *
,,
,-
,/
작업을 실행할 월
을 지정요일 (Day of Week) 0-7 또는 SUN-SAT (0 또는 7은 일요일) *
,,
,-
,/
,L
,#
,?
작업을 실행할 요일
을 지정(요일 지정에 대한 보다 상세한 내용은5. 요일별 표기법 상세
를 참조)4. 크론 표현식 예시
유의) 이 예시에서
초
는 생략했다.4-1. 자주 사용되는 기본 예시
크론식 설명 사용 사례 * * * * *
매 분마다 실행 시스템 상태 점검, 실시간 로그 수집 0 0 * * *
매일 0시 0분에 실행 데이터 백업, 로그 정리, 일일 리포트 생성 0 9 * * 1-5
월~금요일 9시 0분에 실행 업무 시작 알림, 정기 보고서 전송 0 0 1,15 * *
매달 1일과 15일 0시 0분에 실행 급여 정산, 중간/월말 정기 보고서 */5 * * * *
5분마다 실행 서비스 헬스 체크, 자동화된 데이터 수집 4-2. 특수 문자를 활용한 고급 예시
크론식 설명 사용 사례 0 0 28-31 * *
(스크립트로 마지막 날 판별)매월 마지막 날 0시 0분에 실행 월말 정산, 월말 보고서 생성 0 0 1W * *
(스크립트로 평일 보정)매월 1일이 주말이면 가장 가까운 평일 0시 0분에 실행 월초 업무 자동화, 계약서 갱신 0 0 ? * 2#3
(Quartz 사용)매월 세 번째 월요일 0시 0분에 실행 월례 회의 준비, 정기 점검 0 30 8-17/2 * * 1-5
월~금요일 08:30부터 17:30까지 2시간 간격으로 실행 근무 시간 중 정기적인 데이터 수집 0 0 1,15,28-31 * *
(스크립트로 마지막 날 판별)매월 1일, 15일, 마지막 날 0시 0분에 실행 급여 계산, 월간 보고서 작성 0 0 ? * 2#1
(Quartz 사용)매월 첫 번째 월요일 0시 0분에 실행 월초 팀 미팅 준비, 정기 점검 0 0 24-31 * * 5
(스크립트로 마지막 금요일 판별)매월 마지막 금요일 0시 0분에 실행 월말 마감, 급여 이체 처리 - 리눅스 기본
cron
을 사용할 경우,L
,W
,#
연산자를 직접 사용할 수 없으므로 날짜 범위를 설정하고 스크립트로 보완해야 한다(구체적인 사례는8. 스크립트 예시
를 참조). - Quartz
cron
을 사용할 경우,?
,#
,L
을 그대로 사용할 수 있다!
5. 요일 표기법 상세
5-1. 요일 표기법
요일 숫자 표기 문자 표기 일요일 0
또는7
SUN
월요일 1
MON
화요일 2
TUE
수요일 3
WED
목요일 4
THU
금요일 5
FRI
토요일 6
SAT
5-2. 특수 기호와 요일 조합
기호 설명 L
해당 월의 마지막 날짜 (예: 5L
→ 마지막 금요일)#
특정 주의 특정 요일 (예: 1#3
→ 세 번째 월요일)?
날짜 필드( day of month
)를 무시하고 요일 기준으로 실행5-3. 예시
크론식 설명 0 0 * * 1
매주 월요일 0시 0분에 실행 0 0 ? * 5L
매월 마지막 금요일 0시 0분에 실행 0 0 ? * MON#1
매월 첫 번째 월요일 0시 0분에 실행 0 12 * * 2,4
매주 화요일과 목요일 12시에 실행 요일을 사용할 때
?
또는*
을 적절히 활용하는 것이 중요하다!6. 크론 작업의 활용
크론은 다음과 같은 다양한 작업 자동화에 활용된다.
- 시스템 백업
- 로그 파일 정리
- 데이터베이스 유지 관리
- 정기적인 이메일 발송
- 웹사이트 데이터 업데이트
- 정기적인 시스템 점검
- 데이터 동기화 및 백업
- 정기적인 알림 및 보고서 생성
7. 주의사항
- '일'과 '요일' 필드는 동시에 사용할 수 없다. 둘 중 하나를 지정하면 다른 하나는
?
를 사용하여 무시해야 한다. - 일부 크론 구현체에서는 '초' 필드를 생략할 수 있다.
8. 스크립트 예시
리눅스 기본
cron
에서는L
,W
,#
연산자를 직접 사용할 수 없으므로 스크립트로 날짜를 계산하여 보완해야 한다.8-1. 스크립트로 매월 마지막 날 실행하기
(
0 0 L * *
대체)#!/bin/bash # 오늘 날짜에서 다음 달 1일의 하루 전 날짜를 계산 (즉, 이번 달의 마지막 날) LAST_DAY=$(date -d "$(date +%Y-%m-01) +1 month -1 day" +%d) # 오늘 날짜가 마지막 날인지 확인 if [[ $(date +%d) -eq $LAST_DAY ]]; then # 실행할 명령어 (예: 로그 정리) echo "오늘은 마지막 날입니다. 작업을 실행합니다." # 여기에 실행할 명령어 입력 fi cron
등록 방법0 0 * * * /path/to/script.sh
설명:
date -d "$(date +%Y-%m-01) +1 month -1 day" +%d
→ 이번 달의 마지막 날을 계산if [[ $(date +%d) -eq $LAST_DAY ]]; then ... fi
→ 현재 날짜가 마지막 날이면 스크립트 실행
8-2. 스크립트로 매월 마지막 금요일 실행하기
(
0 0 5L * *
대체)#!/bin/bash # 오늘이 금요일인지 확인 if [[ $(date +%u) -eq 5 ]]; then # 이번 달의 마지막 금요일인지 확인 NEXT_FRIDAY=$(date -d "next Friday" +%m) CURRENT_MONTH=$(date +%m) if [[ "$NEXT_FRIDAY" != "$CURRENT_MONTH" ]]; then echo "오늘은 마지막 금요일입니다. 작업을 실행합니다." # 실행할 작업 추가 fi fi cron
등록0 0 * * 5 /path/to/last_friday_script.sh
설명:
date +%u
→ 현재 요일을 숫자로 반환 (5
는 금요일)date -d "next Friday" +%m
→ 다음 금요일이 이번 달인지 확인하여 마지막 금요일 판별
8-3. 스크립트로 매월 첫 번째 월요일 실행하기
(
0 0 ? * MON#1
대체)#!/bin/bash # 현재 날짜가 1일부터 7일 사이인지 확인 if [[ $(date +%d) -le 7 ]] && [[ $(date +%u) -eq 1 ]]; then echo "오늘은 첫 번째 월요일입니다. 작업을 실행합니다." # 실행할 작업 추가 fi cron
등록0 0 * * 1 /path/to/first_monday_script.sh
설명:
date +%d
→ 현재 날짜가1~7일
범위에 있는지 확인date +%u
→ 현재 요일이 월요일(1
)인지 확인
728x90반응형'CS > Linux' 카테고리의 다른 글
[Ubuntu] 커널 업그레이드 (0) 2025.01.26 [Linux] SSH 포트를 22가 아닌 다른 포트로 변경 (0) 2024.12.11 [Ubuntu] 새로운 사용자 생성 및 기존 사용자 잠금 (0) 2024.12.09 생활코딩 리눅스 : rsync(백업할 때 유용) (0) 2024.05.28 [Linux] 생활코딩 리눅스 : 인터넷, 네트워크 그리고 서버(IP 확인 방법), 웹 서버, ssh (0) 2024.05.20 다음글이 없습니다.이전글이 없습니다.댓글