가이드 / Linux cron

Linux cron이 실제로 돌았는지 확인하고, 실패하면 알림 받는 법

crontab에 등록한 백업·정산·수집 작업은 조용히 실패합니다. 서버가 재부팅됐거나, 스크립트 권한이 바뀌었거나, 디스크가 꽉 찼거나 — cron은 아무에게도 말해주지 않아요. 며칠 뒤 “백업 파일이 왜 비어 있죠?”가 되어 돌아올 뿐입니다.

해결 방법은 의외로 간단합니다. 작업이 성공할 때마다 신호(ping)를 보내고, 신호가 제때 안 오면 알림을 받는 것. 하트비트(heartbeat) 모니터링이라고 부릅니다.

1. 모니터 만들기 (30초)

BatchWatch에 무료 가입하고 모니터를 만듭니다. 이름과 실행 시각(예: 매일 오전 4시), 허용 지연(예: 20분)만 고르면 고유 Ping URL이 발급됩니다.

2. crontab에 curl 한 줄 붙이기

기존 크론탭이 이랬다면:

crontab -e (기존)
0 4 * * * /home/ubuntu/backup.sh

성공했을 때만 ping이 가도록 &&로 이어 붙입니다:

crontab -e (변경 후)
0 4 * * * /home/ubuntu/backup.sh && curl -fsS --retry 3 --retry-connrefused https://batch.hkch.co.kr/p/YOUR_TOKEN

이게 전부입니다. -fsS옵션은 “조용히, 실패 시에만 에러”라는 뜻이라 크론 메일함을 어지럽히지 않습니다.

3. 이제 무슨 일이 생기나

백업이 매일 4시에 성공하는 동안엔 아무 일도 없습니다. 그런데 어느 날 스크립트가 죽거나, 서버가 멈췄거나, 크론 데몬이 안 돌면 — 예정 시각 + 허용 지연이 지나는 순간 디스코드/슬랙/텔레그램으로 알림이 옵니다:

🔴 [BatchWatch] DB 백업
작업이 예정 시간 안에 실행되지 않았습니다.
실행 예정: 2026-08-04 04:00  ·  허용 지연: 20분
마지막 정상 실행: 2026-08-03 04:00

실전 팁

서버 시간대를 확인하세요. 클라우드 서버는 대부분 UTC라서 0 4 * * *가 한국시간 오후 1시에 돕니다. 크론탭 맨 위에 CRON_TZ=Asia/Seoul 한 줄을 추가하면 한국시간 기준으로 동작합니다. (실제로 저희 팀도 이 문제를 BatchWatch 알림으로 발견했습니다.)

실패를 더 빨리 알고 싶다면 || 패턴으로 실패 신호를 즉시 보낼 수도 있습니다:

0 4 * * * /home/ubuntu/backup.sh && curl -fsS https://…/p/TOKEN || curl -fsS https://…/p/TOKEN/fail

배치 3개까지 무료로 감시하세요

무료로 시작하기 →