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/[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편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
관련 공식 문서GNU/Linux man 페이지 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.