Linux
使用 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 使用 smrsh,這是一個受限的 shell 實用程序,它提供了通過 /etc/smrsh 目錄指定可用於 Sendmail 的可執行程序的顯式列表的能力。所以我將 cronlog.sh 和 sendmail 符號連結到該目錄。就像是…
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 作業的所有輸出寫入某個文件。
參考:
而不是嘗試使用
MAILTO
(將始終被解釋為電子郵件地址),使用SHELL
.設置
SHELL
為執行給定命令並將輸出定向到文件的小型可執行 shell 腳本的路徑:#!/bin/sh now=$(date) /bin/sh "$@" 2>&1 | awk -v now="$now" '{ printf("[%s]\t%s\n", now, $0) }' >/tmp/cronjob.log
此處將
"$@"
擴展為-c
後跟 crontab 文件中的作業規範。"$@"
用雙引號書寫很重要。在 crontab 中,使用
SHELL=/path/to/cronrun # rest of crontab below...
(假設
/path/to/cronrun
是該短腳本的正確路徑)