베타 — 신규 가입 Business 무료무료로 시작
CronBarkCronBark
무료로 시작

크론잡(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 한 번을 호출하는 거예요. 기존 명령은 그대로 두고 끝에 한 줄만 더하면 돼요.

bash
# 매일 03:00 백업 — 성공하면 CronBark 에 신호
0 3 * * * /app/backup.sh && curl -fsS -m 10 --retry 3 https://api.cronbark.com/api/v1/ping/<토큰>

시작 · 성공 · 실패를 각각 보내면 소요 시간과 실패도 기록돼요.

bash
curl -fsS -m 10 https://api.cronbark.com/api/v1/ping/<토큰>/start
/app/backup.sh \
&& curl -fsS -m 10 https://api.cronbark.com/api/v1/ping/<토큰>/success \
|| curl -fsS -m 10 "https://api.cronbark.com/api/v1/ping/<토큰>/fail?msg=backup-failed"

CronBark 에 크론잡을 등록할 때 cron 식(0 3 * * *)과 유예 시간 · 타임아웃을 넣으면, 예정 시각이 지나도 신호가 없을 때(미실행)나 너무 오래 걸릴 때(지연 · 타임아웃)에도 알림이 와요.

GitHub Actions 예약 워크플로 모니터링

GitHub Actions 의 schedule 은 UTC 기준이에요. 토큰은 저장소 Secrets 에 넣어 두세요.

yaml
on:
schedule:
- cron: "0 18 * * *" # UTC 18:00 = KST 03:00
jobs:
backup:
runs-on: ubuntu-latest
steps:
- run: curl -fsS -X POST https://api.cronbark.com/api/v1/health/${{ secrets.CRONBARK_TOKEN }}/start
- run: ./backup.sh
- if: success()
run: curl -fsS -X POST https://api.cronbark.com/api/v1/health/${{ secrets.CRONBARK_TOKEN }}/success
- if: failure()
run: curl -fsS -X POST https://api.cronbark.com/api/v1/health/${{ secrets.CRONBARK_TOKEN }}/fail

Kubernetes CronJob 모니터링

컨테이너 명령 끝에 신호를 붙이면 돼요. 이미지에 curl 이 있어야 해요.

yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: nightly-report
spec:
schedule: "0 3 * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: report
image: my-app:latest
command: ["/bin/sh", "-c"]
args:
- python report.py && curl -fsS -m 10 https://api.cronbark.com/api/v1/ping/$CRONBARK_TOKEN

Python 으로 작성한 작업이라면 SDK 의 with cronbark.monitor(): 로 감싸기만 해도 시작 · 성공 · 실패가 자동으로 보고돼요. 자세한 내용은 연동 문서를 참고하세요.

크론잡 모니터링 체크리스트

자주 묻는 질문

cron, crontab, 크론잡은 어떻게 다른가요?

cron 은 정해진 시각에 명령을 실행하는 유닉스 계열의 스케줄러(데몬)이고, crontab 은 그 일정을 적어두는 설정 파일이에요. 크론잡(cron job)은 crontab 에 등록된 개별 작업을 말해요. 요즘은 GitHub Actions 스케줄, Kubernetes CronJob 처럼 정해진 시각에 도는 배치 작업 전반을 크론잡이라고 부르기도 해요.

cron 작업이 실패했는지 어떻게 알 수 있나요?

cron 자체는 작업의 성공·실패를 알려주지 않아요. MAILTO 로 출력 메일을 받을 수는 있지만, 출력이 없거나 아예 실행되지 않은 경우는 알 수 없어요. 작업이 시작·종료될 때 외부 서비스에 신호를 보내고, 신호가 오지 않거나 실패 신호가 오면 알림을 받는 하트비트 방식이 가장 확실해요.

크론잡이 아예 실행되지 않은 것도 감지할 수 있나요?

네. 하트비트 방식은 '예정 시각 + 유예 시간' 안에 시작 신호가 없으면 미실행(미동작)으로 판단해요. 서버 재시작 후 crontab 이 사라졌거나, 스케줄러가 멈춘 경우처럼 로그조차 남지 않는 장애를 잡을 수 있어요.

무료로 쓸 수 있나요?

CronBark Free 플랜은 크론잡 20개 · 멤버 5명 · 실행 이력 30일까지 영구 무료예요.

오늘 밤 크론잡이 죽어도
편히 자고 싶다면.

5분 만에 첫 잡을 연결하고 무료로 사용해보세요.