Crontab -> Systemd Timer 유닛 변환기

리눅스 Crontab 표현식을 최신 Systemd OnCalendar 스케줄의 .timer 및 .service 유닛 파일 쌍으로 자동 변환

ADVERTISEMENT · TOP BANNER

Responsive 728x90 / 320x100 Ad Slot

(CLS Prevention Active · Zero Shift)
100% 브라우저 연산 (서버 전송 없음, 개인정보 안전)
Interactive Client Mode
Linux Crontab -> Systemd Timer 유닛 변환기
# Linux Terminal Registration & Activation Commands:
sudo systemctl daemon-reload
sudo systemctl enable --now db-backup.timer
systemctl list-timers --all | grep db-backup
ADVERTISEMENT · HIGH CTR IN-FEED

Native In-Feed / High Viewability Ad Slot

(CLS Prevention Active · Zero Shift)

Linux Crontab 표현식을 최신 Systemd Timer 및 Service 유닛으로 자동 변환기

Crontab은 수십 년간 유닉스 및 리눅스 시스템에서 정기적인 배치 작업(데이터베이스 백업, 로그 순환, 알림 발송)을 예약하는 데 널리 사용되어 온 전통적인 스케줄러입니다. 그러나 현대 엔터프라이즈 리눅스(Ubuntu 20.04+, Debian, RHEL, CentOS Stream, Fedora)에서는 Systemd Timer가 Crontab의 강력하고 현대적인 대안으로 자리잡았습니다.

Crontab은 작업 실행 실패 시 로그 추적이 어렵고, 시스템 부팅 직후 놓친 작업(Missed jobs)을 보정하지 못하며, 독립적인 리소스 제한(CPU, 메모리 cgroups)이나 서비스 간 의존성 제어가 불가능합니다. 반면 Systemd Timer는 `OnCalendar` 표현식을 통해 정교한 일정을 수립하고, `journalctl`을 통한 완벽한 로깅, `Persistent=true`를 통한 부팅 후 자동 보정, 서비스 실패 시 이메일/웹훅 트리거 등 완벽한 감시 체계를 제공합니다.

오르보킷 Crontab to Systemd Timer 변환기는 5필드 표준 크론 구문(예: `0 3 * * *`, `*/15 * * * *`)을 입력받아 Systemd의 `.timer` 유닛 파일과 이를 실행하는 `.service` 유닛 파일 쌍으로 즉시 변환해 줍니다.

Crontab 주기 대 Systemd OnCalendar 달력 사양 변환 원리

5개 필드(분, 시, 일, 월, 요일)의 크론 문법을 Systemd의 `DayOfWeek Year-Month-Day Hour:Minute:Second` 달력 표현식으로 매핑하는 규칙입니다.

OnCalendar 달력 표현식 매핑 로직Mathematical Formulation
Cron(m, h, dom, mon, dow) -> OnCalendar=[dow] *-[mon]-[dom] [h]:[m]:00

별표(*)는 모든 주기를 의미하며, 간격 구문(*/10)은 반복 간격으로 치환됩니다. 요일(0~6 또는 1~7)은 Systemd의 영문 약어(Mon, Tue, Wed, Thu, Fri, Sat, Sun)로 안전하게 정규화됩니다.

매주 월요일 새벽 4시 30분 실행 크론 변환
크론 입력30 4 * * 1 (Minute: 30, Hour: 4, Day: *, Month: *, DoW: 1)파싱 완료
요일 및 시간 매핑1 -> Mon, 4:30 -> 04:30:00달력 요소 추출
OnCalendar 완성OnCalendar=Mon *-*-* 04:30:00Systemd 정규 사양 도출
유닛 파일 결합[Timer] OnCalendar=... Persistent=true.timer 및 .service 파일 완성

👉 크론의 한계를 뛰어넘는 완벽한 리눅스 타이머 유닛이 생성됩니다.

자주 쓰이는 Crontab 표현식 대 Systemd OnCalendar 대응표

스케줄 주기별 Crontab 문법과 Systemd Timer OnCalendar 설정 대조 일람

실행 주기Crontab 표현식Systemd OnCalendar 구문부팅 후 보정주요 용도
매 15분마다*/15 * * * **:0/15선택헬스체크, 임시 파일 정리
매시간 정각0 * * * **:00:00선택통계 집계, 큐 모니터링
매일 새벽 3시0 3 * * **-*-* 03:00:00Persistent=true데이터베이스 백업, 로그 순환
매주 월요일 09:000 9 * * 1Mon *-*-* 09:00:00Persistent=true주간 보고서 생성
매월 1일 자정0 0 1 * **-*-01 00:00:00Persistent=true월간 정산, 이용료 청구
평일 (월~금) 18:000 18 * * 1-5Mon..Fri *-*-* 18:00:00Persistent=true업무 마감 배치 처리
시스템 부팅 10분 후@reboot (비표준)OnBootSec=10minN/A종속 데몬 구동 후 초기화

* Systemd Timer는 systemd-analyze calendar 명령어를 통해 예약 일정을 터미널에서 사전에 검증할 수 있습니다.

ADVERTISEMENT · IN-ARTICLE CONTENT

High-Engagement In-Article Native Ad Slot

(CLS Prevention Active · Zero Shift)

사용 방법

11. Crontab 스케줄 표현식 입력

변환하고자 하는 크론 표현식(예: `0 2 * * *` 매일 새벽 2시)과 실행할 명령어(예: `/usr/local/bin/backup.sh`)를 입력합니다.

22. 서비스 이름 및 옵션 지정

유닛 파일의 이름(예: `db-backup`)과 부팅 후 누락 실행(`Persistent=true`), 실행 지연(`RandomizedDelaySec`) 옵션을 설정합니다.

33. 생성된 .timer 및 .service 코드 확인

실시간으로 생성된 `.timer` 파일과 `.service` 파일 내용을 검토하고 필요에 따라 추가 지시어를 조정합니다.

44. 복사 및 systemctl 등록

[복사] 버튼을 눌러 `/etc/systemd/system/` 경로에 파일을 저장하고 `systemctl enable --now [이름].timer` 명령어로 등록합니다.

실무 Linux 서버 데브옵스 활용 사례

현업 인프라에서 크론을 Systemd 타이머로 교체하는 대표 시나리오

PostgreSQL / MySQL 일일 백업 배치

백업 실패 시 journalctl -u db-backup.service로 오류 로그를 즉시 추적할 수 있도록 구성.

SSL 인증서 (Certbot) 갱신 자동화

Certbot 공식 표준인 certbot.timer 유닛 기반의 일 2회 자동 갱신 체계 구축.

서버 점검 시간 재부팅 후 누락 작업 실행

Persistent=true 옵션을 적용하여 점검 중 놓친 새벽 배치 작업을 부팅 직후 즉시 실행.

메모리 폭주 방지 cgroup 리소스 제한

백업 스크립트에 MemoryMax=1G를 지정하여 서비스 메모리 고갈을 사전에 방지.

💡 Systemd Timer 운영 및 디버깅 전문가 팁

✓ systemd-analyze calendar 로 문법 검증

서버 터미널에서 `systemd-analyze calendar 'Mon *-*-* 04:00:00'`를 실행하면 다음 실행 예정 시각을 미리 계산해 줍니다.

✓ RandomizedDelaySec으로 동시 부하 분산

수십 대의 서버가 동시에 배치를 돌려 DB가 마비되는 것을 방지하기 위해 `RandomizedDelaySec=300`을 추가하세요.

✓ Persistent=true 필수 적용

서버가 꺼져 있거나 재부팅되어 스케줄을 놓쳤을 때, 서버가 켜지자마자 즉시 작업을 실행하도록 보정해 줍니다.

⚠️ 흔히 하는 실수 & 예방법

❌ service 파일만 활성화하고 timer를 누락
✅ 타이머를 가동하려면 `systemctl enable --now [이름].timer`를 실행해야 합니다. service를 enable하면 1회 실행 후 끝납니다.
❌ 환경변수 PATH 미지정으로 명령어 실패
✅ Systemd는 최소 환경에서 실행되므로 스크립트 내부 명령어가 실패하지 않도록 절대경로(/usr/bin/python3 등)를 사용하거나 Environment=PATH=...를 명시하세요.

자주 묻는 질문 (FAQ)

사용자 및 전문가들이 가장 자주 묻는 핵심 질문과 명확한 해답입니다.

6 Q&As

Crontab은 작업이 실패해도 로그를 남기지 않고 사일런트하게 죽는 경우가 많습니다. Systemd Timer는 `journalctl`을 통해 표준 출력과 에러를 완벽히 로깅하고, 부팅 시 누락 보정, cgroup 리소스 제한, 서비스 간 의존성 정의가 가능하여 훨씬 안정적입니다.

ADVERTISEMENT · FOOTER BANNER

Wide Responsive Banner

(CLS Prevention Active · Zero Shift)