inux에서 자동화를 위해서 cron이라는 서비스를 사용하는 사람이 많다.

분단위 자동화 시스템을 돌려 놓고 메일을 확인하니 메일량이 너무도 많아서 확인도 안되고 관리도 안되어서

분단위나 혹은 시간단위 cron 만 메일을 보내지 않도록 처리했다.

cron 설정 파일인 crontab 파일을 열어서 아래와 같이 수정 하면 해당 명령이 실행되어도 메일이 오지 않는다.

* 기존 crontab 파일
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts

* * * * * root run-parts /etc/cron.minute
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly



* 변경 후 crontab 파일
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts

* * * * * root run-parts /etc/cron.minute > /dev/null 2>&1
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

여기서 변경된 부분은 매분 마다 실행되는 parts 에  > /dev/null 2>&1 를 붙여준 것 밖에 없다.

적용이 다 되었으면 cron 서비스를 다시 시작 한다.

시스템 서비스로 등록해두었다면 - service crond restart
시작 서비스로만 등록해두었다면 - /etc/init.d/crond restart


* 참고

' > /dev/null 2>&1 '의 의미

위와 같이 작성을 하고나면 해당 메일이 왜 오지 않는지에 대해서 잠깐 이야기 해보자.

시스템에는 표준입력(0), 표준출력(1), 표준에러(2)가 있으며 각각 0, 1, 2라는 파일 디스크립터(식별자)로 연결 된다.


첫번째 '>'

ls > test.txt 라는 명령어를 입력하게 되면 디렉토리안에 파일을 콘솔에 출력하지 않고 파일에 작성 된다.

여기서 '>' 명령어는 파일 재지향을 뜻한다. 그리고 생략된 부분이 있는데 원래 명령어를 모두 쓰면 ls 1> test.txt 가 된다.

파일 재지향은 표준적으로 입력, 출력이 이뤄지는 부분을 다른 곳에서 받아서 입력, 출력이 가능 하도록 해준다.

위에 명령어를 풀어서 쓰면 'ls의 표준출력을 하지 않고 파일 test.txt에 저장 해라'가 된다.


두번째 '/dev/null'

/dev/null 은 linux에서 거의 블랙홀에 해당 된다. 넣으면 꺼낼수도 없으며 버린다는 표현이 맞을 것 같다.


세번째 '2>&1'

풀어서 쓰면 '표준에러(2)와 표준출력(1)을 재지향 하겠다. 여기서 재지향은 이전에 재지향한 /dev/null 로 설정 된다.'로 볼 수 있다.


이제 전체적으로 풀어보면 아래와 같다.

'매 분마다 실행되는 cron parts의 표준에러, 표준출력을 재지향하여 /dev/null로 보내라.'