매일 crontab 작업이 있습니다.
50 1 * * * sh /my_path/daily_task.sh > /tmp/zen_log 2>&1
이 daily_task 쉘 스크립트는 일부 Python 스크립트를 실행하고 데이터 파일을 생성합니다.
그리고 이틀 연속 실패했다. 그런데 아침에 와서 Python 스크립트를 수동으로 실행하면 데이터 파일이 나옵니다. 또는 날짜만 설정된 새 crontab을 설정했는데 0 10 * * *
해당 crontab도 작동했습니다.
> /tmp/zen_log 2>&1
그래서 어제 오류 메시지를 받기 위해 cron 작업을 실행했습니다 .
오늘 아침 zen_log에서 다음과 같은 오류 메시지를 받았습니다.
/my_path/daily_task.sh: line 19: 12364 Killed /usr/local/bin/python2.7 my_python_script.py 2 mix > mix_hc_$datestamp 2>&1
프로세스가 종료된 것 같나요? 그런데 이것이 무엇을 line 19: 12364 Killed
의미하는가?
첨부된:
오늘, 몇 분 전, Python 스크립트를 수동으로 실행했을 때 다음과 같은 결과를 얻었습니다.
/usr/local/bin/python2.7 my_python_script.py 2 mix > mix_hc_$datestamp 2>&1 Killed
답변1
일반적으로 애플리케이션이 실행되는 동안 커널이 프로세스를 종료하는지 확인하기 위해 killed
파일을 빠르게 살펴보는 것이 좋습니다 . /var/log/messages
내 경험에 따르면 가장 일반적인 트리거는 항상 메모리 부족(OOM) 오류로 인해 발생하며, 우리 회사에서는 주로 Java 애플리케이션을 사용하기 때문에 개발자가 OOM 이벤트를 트리거하는 잘못된 코드 업데이트를 릴리스하는 것이 일반적입니다.
대부분의 사람들이 무거운 시스템 작업을 예약하는 것을 선호하기 때문에 운영 체제에 사용 가능한 리소스가 가장 많을 때 작업을 예약하는 것이 오후 세션이 아닌 오전 세션에 성공할 수 있는 이유일 수 있습니다. 이에 대한 간단한 해결책은 시스템 리소스를 늘리거나, 코드에 할당된 리소스를 제한하거나, 작업을 예약할 때 충돌하지 않도록 리소스를 이동하는 것입니다.