[Linux] crontab 과 stdout/stderr, 환장의 조합
표준출력와 crontab 의 조합
표준 출력이 있는 레거시 모듈이 있다면...
- 종종 레거시 시스템에 존재하는 stdout, stderr 이 포함된 모듈
crontab 에 등록되어버리면?
- crond 에서 실행 후 stdout, stderr 내용이 mail 로 발송된다.
- 메일 서버 설정했다면 메일 서버로,
- 설정하지 않았다면 maildrop 파일로
- /var/spool/postfix/maildrop 등
발생하는 문제
- mail 폭탄
- mail 서버에 불필요한 메일이 가득 쌓이거나
- (주기적으로 정리하지 않을 시) 누적되는 로그로 인한 디스크 용량
- 대량의 파일 생성으로 인한 불필요 & 과도한 inode 점거
- -> 이로 인한 각종 side effect
로그 정리
이미 쌓였다면 정리부터.
- 전체 삭제
postsuper -d ALL
- maildrop 등 골라서 삭제
postsuper -d maildrop
메일 발송 막기
crond의 메일 발송 차단
- /etc/crontab 파일을 편집
MAILTO=""
crontab 출력 버리기
- 레거시라 건드리기 어렵다면 stdout, stderr 를 /dev/null로 버리기
... > /dev/null 2>&1
애초에 표준출력은 지양해야한다.
- 표준출력 스트림은 lock 을 사용하기 때문에 절대 지양해야하는 행위
- 성능 저하 문제도 있음
- 애드혹 테스트 중이 아니라면 제발 사용하지 마세요
- 언어별 logger 를 사용하세요. 제발.
- Ex. Apache log4j2, python logger, ...
- 굳이 보고싶다면 개발 환경에서만 logger 의 console 출력 옵션을 On 해서.