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로 보내겠다.'
'프로그래밍 > Linux' 카테고리의 다른 글
[Linux] CentOS - Can’t connect to MySQL server on 127.0.0.1 (13) (2) | 2014.02.24 |
---|---|
[Linux] netstat 명령어를 이용한 포트별 접속 현황 보기 (0) | 2013.03.14 |
[Linux] CentOS에 Chrome 설치 하기 (2) | 2012.09.23 |