Python/2.7 information

crontab으로 프로그램 돌릴시 주의할점, 자세한 에러 출력법

qkqhxla1 2018. 2. 13. 13:57

로컬에서 잘 돌아가는데 crontab 에 올리면 계속 죽는 프로그램이 있었다.

try:
    1/0
except Exception, e:
    error = str(e)
    # ... 에러를 슬랙으로 쏴줌.

이처럼 에러를 처리하고 있는데 저처럼 에러를 처리하면 정확하게 안 나온다. 서버에서 돌리는데 슬랙으로 
'[Errno 32] Broken pipe' 만 왔다. 구글링을 해봐도 딱히 결과를 찾을수 없었다... 일단 에러를 정확하게 출력하기 위해 구글링을 더 했고, 아래처럼 수정했다. 

import sys
try:
    1/0
except:
    exc_info = sys.exc_info()
    error = traceback.format_exc()
    # ... 에러를 슬랙으로 쏴줌.

ide에서 직접 보는것처럼 아주아주 자세한 에러를 문자열로 리턴해준다. 


https://docs.python.org/2/library/traceback.html


이렇게 나온 에러를 기반으로 원인을 찾았다.
https://stackoverflow.com/questions/15793886/how-to-avoid-a-broken-pipe-error-when-printing-a-large-amount-of-formatted-data

요거하고 비슷한 에러다. 결국 프로그램이 일정이상의 너무 많은 print를 출력하게 되면 에러가 발생한다는 건데... 그냥 crontab에서 실행할때 ./program.sh > /dev/null 처럼 출력결과를 버려주면 해결되었다.