Cron Dispatch (크론 디스패치)
이 기술은 스크립트가 사용자 개입 없이 일정에 따라 실행되어야 하고, 동일한 패턴이 Windows 개발 머신과 Linux 서버 모두에서 동작해야 할 때 사용합니다. Windows 작업 스케줄러와 Linux cron에 대한 복사-붙여넣기 설정, 로깅, 그리고 느린 실행이 다음 틱에 겹쳐 쌓이지 않도록 하는 중복 실행 방지 기능을 제공합니다.
호출 시기
- 사용자가 "이걸 매일 밤 실행해 줘" / "크론 작업 설정해 줘" / "스크립트를 스케줄링해 줘" / "windows 작업 스케줄러"라고 말할 때
- 대화에 포함된 코드가 직접 실행하는 대신 타이머로 실행되어야 하는 독립형 스크립트(Python, Node, 셸)를 사용할 때
호출하지 말아야 할 경우
- 해당 작업이 이미 항상 켜져 있는 서비스나 이벤트 루프에 속해 있고 OS 스케줄러가 필요하지 않은 경우
- 사용자가 로컬 머신이 아닌 관리형 클라우드 스케줄러(GitHub Actions cron, 클라우드 함수)를 원하는 경우
구체적인 예시
사용자 입력:
지금 Windows에서 내 scraper.py를 매일 오전 9시에 실행하게 해 줘. 그리고 나중에 서버용 Linux cron 라인도 알려 줘.
출력:
# Windows: 매일 09:00 작업 등록 (저장소 루트에서 실행)
powershell -ExecutionPolicy Bypass -File assets/setup_task.ps1 `
-TaskName "scraper-daily" `
-Command "python" `
-Arguments "E:\proj\scraper.py" `
-Time "09:00"
# Linux: 동일한 작업, 09:00 매일, 로깅, 중복 방지
0 9 * * * cd /srv/proj && flock -n /tmp/scraper.lock python scraper.py >> /srv/proj/cron.log 2>&1
적용 패턴
- 하나의 스케줄 표현식을 선택하여 이를 Task Scheduler 트리거와 5필드 cron 라인으로 변환합니다.
- 항상 스크립트를 프로젝트 디렉토리에서 실행하여 상대 경로가 올바르게 해석되도록 합니다.
- stdout과 stderr를 로그 파일에 추가합니다. 아무도 보지 않는 콘솔에 의존하지 마십시오.
- 중복 실행을 방지합니다(Linux에서는
flock, Windows에서는-MultipleInstances IgnoreNew). 긴 실행이 두 배로 쌓이지 않도록 합니다. - 안정적인 작업 이름으로 등록, 목록, 제거하여 재설정을 멱등성 있게 유지합니다.
참고: assets/setup_task.ps1, assets/cron_linux.sh.
출처
저자의 자동화 프로젝트에서의 프로덕션 사용을 바탕으로 정리되었습니다. v1.0.0. 참고: [[pipeline-orchestrator]], [[telegram-alerter]].
→ Trawlkit으로 완전한 실행 가능한 봇을 구축하세요.