피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Cron의 가시성 부족과 실행 누락을 해결한 systemd Timer 마이그레이션
Migrating from cron to systemd timers
AI 요약
Context
단일 라인 설정의 간결함만 가진 Cron의 구조적 한계로 인해 Structured Logging 및 Dependency Ordering 구현 불가. 특히 호스트 전원 종료 시 작업이 단순히 누락되는 Persistent 실행 제어 부재 및 최소화된 PATH 환경으로 인한 실행 시점의 런타임 오류 빈번.
Technical Solution
- 스케줄링(Timer)과 실행 로직(Service)을 분리한 Two-file Model 설계를 통한 책임 분리
- Persistent=true 설정을 통한 시스템 다운타임 이후 누락된 작업의 즉각적 보충 실행 보장
- journalctl 기반의 자동 로그 수집 구조를 통한 실행 결과 및 Exit Code의 가시성 확보
- CPUQuota 및 MemoryMax 설정을 통한 개별 작업 단위의 리소스 격리 및 제어
- RandomizedDelaySec 도입을 통한 다수 호스트의 동시 요청으로 인한 Thundering Herd 문제 해결
- OnCalendar 표현식과 systemd-analyze calendar 도구를 활용한 스케줄링 정밀 검증
실천 포인트
- 기존 Crontab의 5필드 설정을 OnCalendar 형식으로 변환하여 가독성 및 정밀도 확보 - Service Unit 내 WorkingDirectory와 Environment를 명시하여 'Shell-Cron 환경 불일치' 방지 - 대규모 플릿 환경의 API 부하 분산을 위해 RandomizedDelaySec 설정 검토 - User-level 작업의 경우 ~/.config/systemd/user/ 배치 및 loginctl enable-linger 설정 적용