systemd timer vs cron
| 항목 | cron | systemd 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=journalINI
# /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.targetBash
# 활성화 및 시작
sudo systemctl daemon-reload
sudo systemctl enable --now mybackup.timer
# 상태 확인
systemctl status mybackup.timer
systemctl list-timersOnCalendar 표현식
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/notify-failure@.service
[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편집 안내 · Editorial Note
AI 도구가 초안 작성에 사용될 수 있습니다. 명령어의 실행 여부와 검증 환경은 각 가이드에 기재된 근거를 확인하세요. 적용 전 사용 중인 버전의 공식 문서를 확인하고, 오류는 이메일로 알려주세요. 이메일로 제보
주제 관련 공식 문서(자동 연결 · 문장별 근거 아님)GNU/Linux man 페이지 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.