cron linux devops cheat-sheet scheduling automation

Cron 구문 치트 시트: 전체 참조 및 일정 시각화

특수 문자, 일반적인 예시, 시각화 도구 설명을 포함한 cron 표현식 구문에 대한 포괄적인 가이드입니다. Linux 및 Unix의 crontab 예약을 마스터하세요.

Cron 구문 치트 시트: 전체 참조 가이드

Cron은 Unix 계열 운영 체제에서 시간 기반의 작업 스케줄러입니다. 백그라운드 작업을 설정하는 개발자이든 서버 유지 관리를 관리하는 DevOps 엔지니어이든 Cron 표현식 구문을 이해하는 것은 필수적입니다.

이 가이드는 cron 필드, 특수 문자 및 실제 예시에 대한 완전한 분석을 제공하여 자신 있게 작업을 예약할 수 있도록 도와줍니다.


1. Cron 표현식 형식

표준 cron 표현식은 5개의 필드로 구성됩니다(Quartz 또는 Jenkins와 같은 일부 시스템에서는 6개).

┌───────────── 분 (0 - 59)
│ ┌───────────── 시간 (0 - 23)
│ │ ┌───────────── 일 (1 - 31)
│ │ │ ┌───────────── 월 (1 - 12)
│ │ │ │ ┌───────────── 요일 (0 - 6) (일요일 ~ 토요일)
│ │ │ │ │
* * * * *

2. 특수 문자 참조

문자 설명 예시
* 모든 값: 해당 필드의 가능한 모든 값과 일치합니다. * * * * * (매분)
, 값 목록 구분 기호: 값 목록을 지정합니다. 0,15,30,45 (15분마다)
- 값 범위: X에서 Y까지의 범위를 지정합니다. 9-17 (오전 9시부터 오후 5시까지)
/ 단계 값: 증분을 지정합니다. */15 (15분마다)
L 마지막 (Last): 월 또는 주의 마지막 날을 지정합니다. 5L (월의 마지막 금요일)
W 평일 (Weekday): 지정된 날짜에서 가장 가까운 평일(월~금)을 지정합니다. 15W (15일에서 가장 가까운 평일)
# 월의 N번째 날: 요일의 N번째 발생을 지정합니다. 6#3 (월의 세 번째 토요일)

3. 일반적인 Cron 예시

일정 표현식 설명
매분 * * * * * 매분 작업을 실행합니다.
매시 정각 0 * * * * 매시 시작 시 실행합니다.
매일 자정 0 0 * * * 매일 00:00에 한 번 실행합니다.
매주 일요일 새벽 4시 0 4 * * 0 주간 백업에 적합합니다.
15분마다 */15 * * * * :00, :15, :30, :45에 실행합니다.
업무 시간 (9시-17시) 0 9-17 * * 1-5 평일 매시 정각에 실행합니다.

4. crontab -e vs crontab -l

crontab 명령은 개인 cron 작업을 관리하는 데 사용됩니다.

  • crontab -e: 개인 crontab 파일을 편집하기 위해 엽니다. 처음인 경우 에디터(nano 또는 vim 등)를 선택하라는 메시지가 표시될 수 있습니다.
  • crontab -l: 현재 사용자의 모든 활성 cron 작업을 나열합니다.
  • crontab -r: 현재 모든 cron 작업을 제거합니다. 주의해서 사용하세요!

5. 일정 시각화하기

원시 cron 표현식을 읽는 것은 어려울 수 있습니다. 그래서 우리는 **Cron 일정 시각화 도구**를 만들었습니다.

우리의 도구는 다음을 도와줍니다:

  1. 표현식 구문 분석: 0 4 * * 0을 "일요일 04:00에"로 즉시 번역합니다.
  2. 다음 실행 시간: 시간대를 기준으로 예약된 다음 5번의 실행 시간을 확인합니다.
  3. 사람이 읽을 수 있는 설명: */5 9-17 * * 1-5가 무엇을 의미하는지 더 이상 추측할 필요가 없습니다.

FAQ: Cron 작업 문제 해결

Q: 내 cron 작업이 실행되지 않는 이유는 무엇입니까?

A: 가장 일반적인 이유는 환경 변수입니다. Cron은 최소한의 셸 환경에서 실행됩니다. 항상 명령에 절대 경로를 사용하고(예: python3 대신 /usr/bin/python3) 출력을 파일에 기록하세요: * * * * * /path/to/script.sh >> /var/log/cron.log 2>&1.

Q: systemd timer 대안은 무엇입니까?

A: 최신 Linux 배포판(Ubuntu, Fedora 등)은 cron보다 systemd timers를 권장합니다. 구성은 더 복잡하지만 journalctl을 통한 더 나은 로깅, 종속성 및 더 유연한 예약을 제공합니다.

Q: cron에서 시간대 문제를 어떻게 처리합니까?

A: 기본적으로 cron은 시스템의 로컬 시간대(서버의 경우 보통 UTC)에서 실행됩니다. 일부 시스템은 crontab 파일 상단에 CRON_TZ=Asia/Seoul을 설정할 수 있게 해주지만, 가장 안정적인 방법은 서버 시계를 원하는 시간대에 동기화하는 것입니다.


Tool3M 관련 도구