크론잡(Cron) 모니터링 가이드
매일 새벽 도는 백업, 매시간 도는 동기화 — 크론잡은 실패해도 아무도 모르는 경우가 많아요. 크론잡 모니터링이 왜 필요한지, 어떤 방법이 있는지, crontab · GitHub Actions · Kubernetes CronJob 에 모니터링을 붙이는 방법까지 정리했어요.
크론잡(cron) 모니터링이란?
크론잡 모니터링(크론 모니터링, cron monitoring)은 정해진 시각에 도는 작업이 제때 시작했는지, 제시간에 끝났는지, 성공했는지를 감시하고 이상이 생기면 알려주는 것을 말해요. cron 은 작업을 실행만 할 뿐 결과를 확인해 주지 않기 때문에, 따로 감시하지 않으면 장애를 늦게 발견하게 돼요.
크론잡은 왜 조용히 실패할까?
크론잡 장애는 대부분 다음 세 가지 중 하나예요.
1. 에러로 끝났는데 아무도 모름
스크립트가 exit 1 로 끝나도 cron 은 아무 말도 하지 않아요. 백업 파일이 비어 있다는 걸 복구가 필요한 날 알게 되죠.
2. 끝나지 않고 멈춤 (지연 · 타임아웃)
외부 API 응답을 기다리다 몇 시간째 멈춰 있거나, 다음 실행과 겹치기 시작해도 겉으로는 정상처럼 보여요.
3. 아예 실행되지 않음 (미실행)
서버를 옮기면서 crontab 이 빠졌거나, 스케줄러가 멈췄거나, 시간대 설정이 바뀐 경우예요. 실행 자체가 없으니 로그도 에러도 남지 않아서 가장 발견하기 어려워요. GitHub Actions 의 예약 워크플로처럼 부하가 높을 때 지연되거나, 저장소 활동이 없으면 스케줄이 비활성화되는 경우도 있어요.
cron 모니터링 방법 비교
| 방법 | 동작 | 실패 감지 | 멈춤 감지 | 미실행 감지 |
|---|---|---|---|---|
| 서버 로그 확인 | 사람이 직접 확인 | ✓ (나중에) | ✗ | ✗ |
| cron MAILTO 메일 | 출력이 있을 때 메일 | △ 출력이 있을 때만 | ✗ | ✗ |
| 작업 안에 알림 코드 작성 | 실패 시 직접 전송 | ✓ | △ 직접 구현 | ✗ |
| 하트비트(헬스체크) 서비스 | 시작·종료 신호를 외부에서 감시 | ✓ | ✓ | ✓ |
세 가지 장애를 모두 잡으려면 하트비트(헬스체크) 방식이 필요해요. 작업이 시작·종료될 때 외부 서비스로 신호를 보내고, 서비스는 예정 시각에 신호가 오지 않거나 너무 오래 걸리거나 실패 신호가 오면 알림을 보내요. Healthchecks.io · Cronitor 같은 해외 서비스와 같은 방식이고, CronBark 는 이 방식을 한국어로 제공해요.
crontab 에 모니터링 붙이기
가장 간단한 방법은 작업이 성공했을 때 URL 한 번을 호출하는 거예요. 기존 명령은 그대로 두고 끝에 한 줄만 더하면 돼요.
시작 · 성공 · 실패를 각각 보내면 소요 시간과 실패도 기록돼요.
CronBark 에 크론잡을 등록할 때 cron 식(0 3 * * *)과 유예 시간 · 타임아웃을 넣으면, 예정 시각이 지나도 신호가 없을 때(미실행)나 너무 오래 걸릴 때(지연 · 타임아웃)에도 알림이 와요.
GitHub Actions 예약 워크플로 모니터링
GitHub Actions 의 schedule 은 UTC 기준이에요. 토큰은 저장소 Secrets 에 넣어 두세요.
Kubernetes CronJob 모니터링
컨테이너 명령 끝에 신호를 붙이면 돼요. 이미지에 curl 이 있어야 해요.
Python 으로 작성한 작업이라면 SDK 의 with cronbark.monitor(): 로 감싸기만 해도 시작 · 성공 · 실패가 자동으로 보고돼요. 자세한 내용은 연동 문서를 참고하세요.
크론잡 모니터링 체크리스트
- 유예 시간 — 예정 시각보다 조금 늦게 시작해도 되는 여유(예: 5분)를 잡아 오탐을 줄이세요.
- 타임아웃 — 평소 소요 시간보다 넉넉하게, 그러나 다음 실행과 겹치지 않게 정하세요.
- 알림 채널 — 실패는 팀 Slack 채널로, 미실행은 담당자 메일로처럼 조건마다 나누면 놓치지 않아요.
- 복구 알림 — 다시 정상이 됐다는 알림도 받아야 장애를 닫을 수 있어요.
- 시간대 — 서버 · 스케줄러 · 모니터링의 시간대(UTC/KST)를 맞추세요.
자주 묻는 질문
cron, crontab, 크론잡은 어떻게 다른가요?
cron 은 정해진 시각에 명령을 실행하는 유닉스 계열의 스케줄러(데몬)이고, crontab 은 그 일정을 적어두는 설정 파일이에요. 크론잡(cron job)은 crontab 에 등록된 개별 작업을 말해요. 요즘은 GitHub Actions 스케줄, Kubernetes CronJob 처럼 정해진 시각에 도는 배치 작업 전반을 크론잡이라고 부르기도 해요.
cron 작업이 실패했는지 어떻게 알 수 있나요?
cron 자체는 작업의 성공·실패를 알려주지 않아요. MAILTO 로 출력 메일을 받을 수는 있지만, 출력이 없거나 아예 실행되지 않은 경우는 알 수 없어요. 작업이 시작·종료될 때 외부 서비스에 신호를 보내고, 신호가 오지 않거나 실패 신호가 오면 알림을 받는 하트비트 방식이 가장 확실해요.
크론잡이 아예 실행되지 않은 것도 감지할 수 있나요?
네. 하트비트 방식은 '예정 시각 + 유예 시간' 안에 시작 신호가 없으면 미실행(미동작)으로 판단해요. 서버 재시작 후 crontab 이 사라졌거나, 스케줄러가 멈춘 경우처럼 로그조차 남지 않는 장애를 잡을 수 있어요.
무료로 쓸 수 있나요?
CronBark Free 플랜은 크론잡 20개 · 멤버 5명 · 실행 이력 30일까지 영구 무료예요.