MAILTO를 사용하여 모든 crontab 출력 기록

MAILTO를 사용하여 모든 crontab 출력 기록

나는 모든 cron 작업 출력을 (이메일 대신) 파일에 저장하려고 했습니다. 별칭은 /etc/aliases에 설정됩니다.

logthecron: "|cronlog.sh"

그리고 crontab에서 MAILTO=logthecron. cronlog.sh 파일은 출력을 파일에 기록합니다.

#!/bin/sh
$@ 2>&1 | sed -e "s/\(.*\)/[`date`] \1/" >> /tmp/a

메일 보내기를 사용하고 있습니다. Sendmail은 /etc/smrsh 디렉토리를 통해 Sendmail에서 사용할 수 있는 실행 프로그램의 명시적 목록을 지정할 수 있는 제한된 쉘 유틸리티인 smrsh를 사용합니다. 그래서 cronlog.sh를 심볼릭 링크하고 해당 디렉토리에 메일을 보냈습니다. 그것은 마치 ...

ln -s /root/cron/cronlog.sh /etc/smrsh/

아직도 이 오류가 계속 발생합니다.

May 10 09:33:11 sandbox01 smrsh: uid 8: attempt to use "cronlog.sh"
May 10 09:33:11 sandbox01 sendmail[23870]: x4ADXB5Y023868: to="|cronlog.sh", ctladdr=<logthecron@[hostname]> (8/0), delay=00:00:00, xdelay=00:00:00, mailer=prog, pri=30787, dsn=5.0.0, stat=Service unavailable
May 10 09:33:11 sandbox01 sendmail[23870]: x4ADXB5Y023868: x4ADXB5Y023870: DSN: Service unavailable

참고: 저는 CentOS v7을 사용하고 있으며 파일은 실행 가능하고 이메일은 문제 없이 작동합니다. 별칭에서 전체 디렉토리 경로를 시도했습니다. 별도의 cronjob 출력을 작성하고 싶지 않지만 cron 작업의 모든 출력은 특정 파일.

인용하다:

  1. smrsh:http://www.faqs.org/docs/secure/chap22sec182.html

  2. crontab의 모든 stderr 출력을 파일에 기록합니다.

답변1

을 사용하지 말고 MAILTO(항상 이메일 주소로 해석됨) 대신 을 사용하세요 SHELL.

SHELL주어진 명령을 실행하고 출력을 파일로 보내는 작은 실행 가능한 셸 스크립트의 경로를 설정합니다 .

#!/bin/sh

now=$(date)
/bin/sh "$@" 2>&1 | awk -v now="$now" '{ printf("[%s]\t%s\n", now, $0) }' >/tmp/cronjob.log

이는 crontab 파일의 작업 사양 "$@"으로 확장됩니다 . 큰따옴표로 작성하는 것이 중요합니다.-c"$@"

크론탭에서는 다음을 사용하세요.

SHELL=/path/to/cronrun

# rest of crontab below...

( /path/to/cronrun짧은 스크립트에 대한 올바른 경로를 가정)

관련 정보