환경
- 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 서버 간 네트워크 연결이 끊어졌지만, 쉘은 그 결과를 계속 기다리는 좀비 프로세스가 되어 버렸다.
0 댓글