나는 모든 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
을 사용하지 말고 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
짧은 스크립트에 대한 올바른 경로를 가정)