환경
– AIX
Cron job 실행 누락 원인 및 조치 방법
cron에 등록한 job이 실행되지 않아서 난리가 났다. 왜 실행이 안되었을까? 로그를 확인해 보자. (cron 로그는 /var/adm/cron/log 파일에서 확인할 수 있다. 혹시 없다면 /etc/cronlog.conf를 살펴보자).
cron: 0481-087 The c queue maximum run limit has been reached.
이런 로그가 남아 있다면 cron이 실행할 수 있는 job의 개수가 설정치에 도달했기 때문이다. 그래서 새로운 job을 실행하지 않고, 위와 같은 로그만 남기는 것이다.
원인은
– 동시에 너무 많은 job을 실행시키고 있거나,
– 이전에 실행한 job이 여전히 실행 중이기 때문이다.
해결 방법은
– 동시에 실행하는 job의 개수를 줄이거나,
– 동시에 실행할 수 있는 job의 설정치를 늘리는 것이다.
주의할 점
이 때 주의해야 할 점이 하나 있다. job이 정상 종료되지 않고 좀비처럼 살아 있어서 발생한 경우라면 설정치를 늘려도 동일한 현상이 재발한다는 점이다. 의심스럽다면 cron이 실행한 프로세스를 점검해 보자.
먼저 cron pid를 확인한다.
[PLUTO:catnap:/util/catnap] ps -ef | grep cron
root 1234567 1 0 5월 5일 – 277:04 /usr/sbin/cron
catnap 24445010 37945496 0 11:14:58 pts/5 0:00 grep cron
[PLUTO:catnap:/util/catnap]
|
cs |
이제 cron이 실행한 프로세스를 시간 순으로 조회하자.
[PLUTO:catnap:/util/catnap] ps -T 6422730
PID TTY TIME CMD
1234567 – 277:04 cron
5308592 – 0:00 |–sh
26738922 – 0:00 | –sqlplus
10879144 – 0:00 |–sh
29753492 – 0:00 | –sqlplus
18677868 – 0:00 |–sh
43581524 – 0:00 | –sqlplus
……………………. 생략
[PLUTO:catnap:/util/catnap]
|
cs |
실행된 시간 순서로 조회한 것이므로, 오래된 프로세스부터 조회된다. 오래된 프로세스가 언제 실행된 것인지 확인해보자. 만약 이미 종료되었어야 할 프로세스라면 원인을 파악하고 조치를 해야 한다.
참고로 위의 사례는 쉘에서 sqlplus를 이용하여 프로시저를 호출해서 발생했다. 오래 걸리는 프로시저라서 AP와 DB 서버 간 네트워크 연결이 끊어졌지만, 쉘은 그 결과를 계속 기다리는 좀비 프로세스가 되어 버렸다.