본문 바로가기

프로그래밍/Linux

[Linux] cron 결과 메일 개별 관리 하기



linux에서 자동화를 위해서 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라는 파일 디스크립터(식별자)로 연결 된다.



첫번째 '>' 


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


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


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


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



두번째 '/dev/null'


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



세번째 '2>&1'


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



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


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