cron job 실행이 안될 때 확인 방법


환경

- 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 댓글