월간 cron 출력 이메일을 중지하는 방법

월간 cron 출력 이메일을 중지하는 방법

서버는 데비안 6.0입니다. /etc/aliases에는 다음이 있습니다.

root: [email protected]

이렇게 하면 루트 이메일이 나에게 직접 전송됩니다. 오늘 /etc/cron.monthly에 넣은 월간 스크립트의 결과가 이메일로 전송되었습니다. 이는 아래와 같이 매우 간단한 스크립트입니다.

#!/bin/bash
cd /a/directory
rm -rf ./*
wget http://www.site.com/fresh-copy.zip
unzip fresh-copy.zip
rm fresh-copy.zip

제가 받은 이메일은 다음과 같습니다.

**Subject**: Cron <root@myserver> test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
**From**: [email protected]
**Body**:

    /etc/cron.monthly/speedtest:
--2013-03-01 06:52:01--  http://www.site.com/fresh-copy.zip
Resolving www.site.com... 11.22.33.44
Connecting to www.site.com|11.22.33.44|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 99763924 (95M) [application/zip]
Saving to: `fresh-copy.zip'

     0K .......... .......... .......... .......... ..........  0% 11.7M 8s
    50K .......... .......... .......... .......... ..........  0% 11.3M 8s
   100K .......... .......... .......... .......... ..........  0% 11.4M 8s
        *CUT OUT FOR BREVITY*
 97350K .......... .......... .......... .......... .......... 99% 16.9M 0s
 97400K .......... .......... .....                           100% 11.6M=9.7s

2013-03-01 06:52:11 (9.78 MB/s) - `fresh-copy.zip' saved [99763924/99763924]

Archive:  fresh-copy.zip
  inflating: file1.ext
  inflating: file2.ext
  inflating: file3.ext
  inflating: file4.ext
  inflating: file5.ext

이 이메일의 유일한 출력은 wgetand unzip명령에서 나온 것입니다. 스크립트를 편집하여 이 두 줄 끝에 넣을 수도 있지만 > /dev/null그게 정말 최선의 방법일까요? 출력을 생성하는 스크립트에 더 많은 명령을 추가하면 항상 > /dev/null각 줄에 추가해야 합니다 . 이 cron 스크립트로 이메일 알림 출력을 비활성화하는 방법이 있습니까?

답변1

> /dev/null스크립트에서 계속 사용하는 것이 좋습니다 (또는 -q및 옵션을 사용). 이렇게 하면 명령 중 하나에서 오류가 발생하면 해당 오류가 이메일로 전송되지만 정상적인 출력은 억제됩니다.wgetunzip

답변2

더 간단한 접근 방식은 스크립트를 기존 crontab에 추가하는 것입니다. cron.monthly 디렉토리에 스크립트를 추가하는 대신 출력이 /dev/null로 이동하도록 crontab 줄에 지정할 수 있습니다. 이와 같이:

crontab -e

크론탭을 편집하세요. 그런 다음 다음 줄을 추가합니다.

@monthly /path/to/script > /dev/null

이는 STDOUT이 /dev/null로 리디렉션되지만 STDERR은 여전히 ​​이메일에 표시된다는 의미입니다. 오류 이메일도 받지 않으려면 행은 다음과 같아야 합니다.

@monthly /path/to/script > /dev/null 2>&1

답변3

나는 사용해왔다cronic그것은 한동안 나를 실망시킨 적이 없습니다.

본질적으로 이것은 오류 반환 코드가 있거나 stderr에 뭔가가 있는 경우에만 이메일을 보내는 cron 주변의 래퍼 스크립트입니다. 이렇게 하면 cron이 실행될 때마다 스팸 메일을 받지 않지만 문제가 발생하면 알림을 받게 됩니다.

이를 사용하려면 cronic 스크립트를 다운로드하고 cron 명령을 변경하십시오(예:)

* * * * * awesome_command

도착하다

* * * * * /path/to/cronic awesome_command

답변4

이 스크립트를 "음소거"하려는 경우 /dev/null 2>&1파일을 호출하는 crontab 파일의 줄 끝에 스크립트를 넣을 수 있습니다. 이 방법을 사용하면 스크립트를 월별 폴더에 배치할 수 없으며 다음을 사용하여 crontab 파일을 편집해야 합니다.

contab -e

또는 cron 구성을 편집하고 여기에서 메일을 삭제할 수 있습니다. 모든 것엔 설명이 있다여기.

관련 정보