여기서는 멈추세요
- 결제·정산·메일처럼 중복 실행이 위험한 작업은 멱등성과 실행 이력을 확인하기 전 수동 시작하지 않습니다.
- 시간대와 놓친 실행 처리 요구가 확정되지 않으면 OnCalendar·Persistent를 변경하지 않습니다.
SCHEDULED JOBS
SAFE OPERATING BOUNDARY
새로 enable한 timer는 승인 후 disable하고, 변경한 unit·drop-in을 원본으로 복원한 뒤 daemon-reload로 이전 스케줄을 확인합니다.
BEFORE YOU START
CHECK THE BRANCH
스케줄 계산보다 연결된 service의 User, WorkingDirectory, Environment와 애플리케이션 오류를 확인합니다.
OnCalendar timer의 Persistent=true는 비활성 동안 놓친 실행을 기동 시 보충하지만, 중복 실행에 안전한 작업인지 먼저 확인해야 합니다.
Cron의 제한된 PATH, 셸, 실행 사용자와 작업 디렉터리를 고려해 절대 경로와 로그 출력을 확인합니다.
FOLLOW THE FLOW
두 스케줄러를 동시에 수정하지 않고 실제로 등록된 위치부터 식별합니다.
systemctl list-timers --all --no-pagersystemctl status cron.service --no-pager -lcrontab -lsudo ls -la /etc/cron.d /etc/cron.daily목록에 없으면 등록·enable 문제이고, 목록에는 있지만 LAST가 비어 있거나 service가 실패하면 실행 문제입니다.
실제 스케줄러와 작업 이름을 하나로 좁힙니다.
TIMER_NAME을 실제 기본 이름으로 바꾸고 timer·service를 함께 확인합니다.
systemctl status TIMER_NAME.timer TIMER_NAME.service --no-pager -lsystemctl cat TIMER_NAME.timer TIMER_NAME.servicesystemctl list-timers TIMER_NAME.timer --all --no-pagertimer의 active(waiting)와 service의 마지막 종료 코드는 별개입니다. Trigger와 Unit 연결도 확인합니다.
service 실패라면 스케줄을 바꾸기 전에 서비스 로그를 읽습니다.
CALENDAR_EXPRESSION을 unit의 OnCalendar 값으로 바꾸고 다음 실행 시각을 계산합니다.
systemd-analyze calendar 'CALENDAR_EXPRESSION'timedatectl statussystemctl show TIMER_NAME.timer -p NextElapseUSecRealtime -p LastTriggerUSec -p Triggers예상 시간대와 Next elapse가 다르면 OnCalendar·Timezone 설정을 수정해야 합니다. Persistent는 OnCalendar timer에만 놓친 실행 보충 효과가 있습니다.
정확한 다음 실행 시각과 중복 실행 허용 여부를 기록합니다.
민감한 환경변수 값을 공유하지 말고 실행 사용자·경로·권한 차이를 확인합니다.
journalctl -u TIMER_NAME.timer -u TIMER_NAME.service --since '-24 hours' --no-pagersystemctl show TIMER_NAME.service -p User -p Group -p WorkingDirectory -p EnvironmentFilessudo run-parts --test /etc/cron.daily명령 경로, 작업 디렉터리, 실행 권한, 파일명 규칙 또는 환경 파일 누락을 확인합니다.
수동 실행이 외부 시스템에 중복 작업을 만들지 확인하고 변경 단계로 이동합니다.
작업이 멱등하고 수동 실행의 부작용이 없을 때만 service를 한 번 실행합니다.
sudo systemctl daemon-reloadsudo systemctl enable --now TIMER_NAME.timersudo systemctl start TIMER_NAME.servicesystemctl status TIMER_NAME.service --no-pager -lsystemctl list-timers TIMER_NAME.timer --all --no-pagerservice가 성공하고 LAST·NEXT가 기대값이며 결과물이 한 번만 생성되어야 합니다.
중복·지연 실행 가능성을 포함해 모니터링 기준을 운영 기록에 남깁니다.
PRIMARY REFERENCES
배포판과 버전에 따라 옵션·로그 위치가 다를 수 있습니다. 실행 전 서버의 --help와 로컬 매뉴얼을 함께 확인하세요.