/엔지니어/OS / 시스템/systemd timer — cron 대체 스케줄러
OS / 시스템중급UbuntuDebianCentOSsystemdtimercron

systemd timer — cron 대체 스케줄러 완전 가이드

systemd timer 유닛으로 정기 작업을 예약하고, 실패 알림·로그·지연 실행을 설정하는 방법과 cron 대비 장단점을 설명합니다.

systemd timer vs cron

항목cronsystemd timer
로그syslog 혼재journalctl 통합
실패 감지어려움자동 (OnFailure=)
의존성없음After=, Requires=
누락 실행 보정없음Persistent=true
실행 환경제한적서비스 유닛과 동일

기본 구조 — .service + .timer 쌍

Bash
# 두 파일이 쌍을 이룸
/etc/systemd/system/mybackup.service   # 실행할 작업
/etc/systemd/system/mybackup.timer     # 실행 스케줄

예시: 매일 백업

INI
# /etc/systemd/system/mybackup.service
[Unit]
Description=Daily database backup
After=network.target postgresql.service

[Service]
Type=oneshot
User=backup
ExecStart=/usr/local/bin/backup.sh
StandardOutput=journal
StandardError=journal
INI
# /etc/systemd/system/mybackup.timer
[Unit]
Description=Run mybackup daily at 3am

[Timer]
OnCalendar=*-*-* 03:00:00     # 매일 03:00
Persistent=true                # 누락된 실행 즉시 보정
RandomizedDelaySec=300         # 최대 5분 랜덤 지연 (서버 분산)
Unit=mybackup.service          # 생략 가능 (같은 이름 자동 연결)

[Install]
WantedBy=timers.target
Bash
# 활성화 및 시작
sudo systemctl daemon-reload
sudo systemctl enable --now mybackup.timer

# 상태 확인
systemctl status mybackup.timer
systemctl list-timers

OnCalendar 표현식

CODE
*-*-* 00:00:00       # 매일 자정
*-*-* 03:00:00       # 매일 03:00
Mon *-*-* 09:00:00   # 매주 월요일 09:00
*-*-1 00:00:00       # 매월 1일 자정
*-*-* 0/6:00:00      # 6시간마다
hourly               # 매시 정각 (= *-*-* *:00:00)
daily                # 매일 자정 (= *-*-* 00:00:00)
weekly               # 매주 월요일 자정
monthly              # 매월 1일 자정
Bash
# 표현식 검증
systemd-analyze calendar "*-*-* 03:00:00"
systemd-analyze calendar "Mon *-*-* 09:00:00"

부팅 후 일정 시간 뒤 실행

INI
[Timer]
OnBootSec=5min         # 부팅 5분 후 1회 실행
OnUnitActiveSec=1h     # 이후 1시간마다 반복

실패 알림 설정

INI
# mybackup.service에 추가
[Unit]
OnFailure=notify-failure@%n.service

# /etc/systemd/system/[email protected]
[Unit]
Description=Failure notification for %i

[Service]
Type=oneshot
ExecStart=/usr/local/bin/notify-slack.sh "Timer %i failed"

로그 및 수동 실행

Bash
# 타이머 전체 목록 (다음 실행 시간 포함)
systemctl list-timers --all

# 서비스 로그
journalctl -u mybackup.service --since today
journalctl -u mybackup.service -n 50

# 수동으로 즉시 실행 (타이머와 별개)
sudo systemctl start mybackup.service

# 타이머만 중지 (서비스는 유지)
sudo systemctl stop mybackup.timer
sudo systemctl disable mybackup.timer
#systemd#timer#cron#스케줄러#자동화#linux
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

관련 공식 문서GNU/Linux man 페이지

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.