ai-coding-mines목차GitHub

크론 + `pgrep` 중복 실행 가드는 자기 자신을 잡는다

Git · 자동화

증상

작업이 한 번도 안 돈다. 에러도 로그도 없다. 크론은 정상 종료(0)로 찍힌다.

원인

크론이 띄운 셸의 명령줄에 스크립트명이 포함되므로 pgrep이 매번 히트한다 → "이미 돌고 있다"고 판단해 항상 즉시 exit.

해법 — PID 파일 + kill -0

PIDFILE=/tmp/job.pid
if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then exit 0; fi
echo $$ > "$PIDFILE"
trap 'rm -f "$PIDFILE"' EXIT INT TERM HUP

kill -0은 신호를 보내지 않고 존재만 확인한다. 죽은 PID면 통과하므로 잔재 파일에 막히지 않는다.

세 가지를 다 본다 — 1) 파일이 비어있지 않은가(-s) 2) 내용이 숫자인가 3) 그 PID가 살아있는가

후기 — 침묵이 "주문 없음"으로 읽혔다

같은 가드가 주문 알림 루프에 걸려 있었다. 크론은 매 회차 정상 종료(0)로 찍혔고, 알림이 통째로 멈춘 구간은 "알림이 안 온다 = 주문이 없다"로 읽혔다. 같은 날 다른 원인 하나가 같은 경로를 막고 있어서, 가드를 고쳐도 알림은 돌아오지 않았다.

침묵의 원인이 둘이면 하나를 고쳐도 눈에 보이는 변화가 없다. 고친 뒤에도 침묵이 그대로면 "고친 게 틀렸다"보다 "원인이 더 있다"부터 의심한다.