제일 먼저 알아야 할 것은 "cron 은 shell 과 실행 환경이 다르다"라는 것이다. 즉, shell 환경에서 실행할 때는 잘 되는데 cron에 넣어두면 안된다고 하면 그건 그 둘의 실행 환경이 다르기 때문일 가능성이 크다.

내가 당한 케이스는 파이썬 스크립트에서 print 문으로 한글 메시지를 찍은 경우다. 예를 들어, 

print msg

에서 msg  변수에 한글이 포함되어 있을 수 있다고 하자. 이를 터미널 환경에서 실행하면 대부분의 터미널 환경이 디폴트 인코딩으로 ko_KR.UTF-8 을 쓰고 있으므로 잘 나온다. 

하지만 cron에서는 shell 의 인코딩을 끌고 가는 것이 아니므로 인코딩 에러를 내고 실행이 중단될 수 있다. 이를 피하기 위해서는 파이썬의 기본 입출력 인코딩이 utf8 이라는 것을 명시적으로 지정해줘야 한다. 해당 cron job 을 스케줄링 하는 파일 (예를 들어, /etc/cron.d/anacron) 에서 

PYTHONIOENCODING=utf8 

이라고 맨 앞에 선언해주면 된다.


저작자 표시
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
posted by 신묘군

티스토리 툴바