是否有可用於 cron 作業的擴充日誌記錄?

是否有可用於 cron 作業的擴充日誌記錄?

我在 下有 3 個腳本/etc/cron.daily。我的 cron 日誌是用/var/log/cron.下面是上面已運行的 cron 的條目。

(root) CMD (run-parts /etc/cron.hourly)

這裡cron 內的腳本的stdout或不可用,它表明命令已在該資料夾上運行。stderrrun-parts

有什麼技巧可以幫助記錄執行 3 個腳本時發生的情況嗎?

注意:我無法編輯腳本cron.daily以將輸出和錯誤重定向到日誌檔案。

答案1

在 Unix 上,郵件系統是將系統通知傳遞給使用者的方式。您可以將其視為有點像在 Windows 上,如果需要通知您某件事,工作列中會顯示一些內容並帶有彈出訊息。由於 cronjobs(理論上)不應該產生任何輸出(因為沒有人應該在那裡看到它),因此任何輸出(stdout 或 stderr)都被視為可能表明錯誤或問題,因此會向cronjob 的所有者提示他們檢查一下。

因此,所有輸出(stdout 和 stderr)都透過本機郵件系統發送給 cronjob 的擁有者。如果所有者是非個人帳戶,您可以透過設定別名指示本地 MTA 中繼到真實的電子郵件帳戶。例如,我添加到/etc/aliases

root: [email protected]

然後執行newaliases命令(重建郵件別名資料庫)。之後,我開始在我的公司電子郵件收件匣中收到 root 的電子郵件:

root@xxxxxxvlp05 ~ $ echo "the game" | mutt root -s "No Diggity"
sendmail: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
sendmail: warning: inet_protocols: configuring for IPv4 support only
postdrop: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
postdrop: warning: inet_protocols: configuring for IPv4 support only

看看它的所有榮耀

這或多或少是正常的方式(讓系統發送通知電子郵件)。還有其他處理通知的方法。一些替代方案:

修改別名以將電子郵件儲存到特定檔案:

root: /var/log/rootMails

將郵件透過管道傳輸到腳本:

root: |/usr/local/bin/filterMail

解決別名問題的另一種方法是使用MAILTO=許多 cron 守護程式支援的使用者 crontab 中的選項。如果您只想接收一組特定的使用者通知,而不是任何將放入其郵箱的內容(這就是aliases實現的效果),那麼這可能是更好的選擇。

我確信還有很多其他的,但您可能想做第一個或最後一個。

答案2

您可以執行 cron 並-s選擇使用 syslog 而不是發送郵件。這至少適用於 RHEL 及其衍生產品、FreeBSD 和 MacOS。

答案3

您可以將自己記錄在 bash 腳本中:

logfile=/var/log/mine/whatever.log

log () {
    timestamp=$(date +'%F %T')
    echo -e "$timestamp $1" >> $logfile
    shift
    for a; do
        echo -ne "$a" >> $logfile
    done
}    

log "Hello world.\nAnd so on..."

[...]

如果您正在執行的命令包含要記錄的輸出:

somecommand 2>&1 >> $logfile

您也可以將訊息和錯誤傳送到系統記錄器(請參閱 參考資料man logger),並可能透過 syslog 配置對它們進行排序。

相關內容