Bash

如何將輸出從 cron 重定向到日誌文件並添加時間戳?

  • March 15, 2020

我的 Mac 上的大多數日誌在輸出消息之前都有一個時間戳,如下所示:

Nov 14 17:55:24 - SoftRAID Driver: SoftRAID driver loaded, version 5.8.1.

我在 cron 中執行一個執行檔,而不是使用郵件,我想將所有資訊輸出到一個日誌文件,並在輸出前面的每一行添加一個時間戳。我>>用來附加到單個文件。

這是我的 crontab:

SHELL=/bin/bash
MAILTO=""
* 6-23 * * * /usr/local/bin/urlwatch >> /Users/john/cronjobs/urlwatch.log

這就是我在 urlwatch.log 中得到的

UNCHANGED: (01)urlwatch update released (https://github.com/thp/urlwatch/releases/latest)

如何使輸出看起來像這樣:

Nov 14 17:55:24 - UNCHANGED: (01)urlwatch update released (https://github.com/thp/urlwatch/releases/latest)

我從網上嘗試了許多不同的建議,但都沒有運氣。如果保存到文本文件更容易,那也可以。

試過這個很接近:

* 6-23 * * * (date && /usr/local/bin/urlwatch)  >> /Users/john/cronjobs/urlwatch.log

日誌文件中的輸出如下所示:

Sun Mar 15 13:35:00 CDT 2020
UNCHANGED: (03)RansomWhere? Objective-See (https://objective-see.com/products/ransomwhere.html)
UNCHANGED: (01)urlwatch update released (https://github.com/thp/urlwatch/releases/latest)
UNCHANGED: (02)urlwatch webpage (https://thp.io/2008/urlwatch/)

如果您有(或可以從自製軟體中獲得) time ts s tamp實用程序,那麼您應該能夠執行類似的操作

/usr/local/bin/urlwatch | /path/to/ts >> /Users/john/cronjobs/urlwatch.log

/path/to/ts通常/usr/bin/ts在 Linux 系統上;它可能是 OSX 上的另一個位置)。來自man ts

DESCRIPTION
       ts adds a timestamp to the beginning of each line of input.

如果要指定非預設時間格式,則可以這樣做,但請記住該%符號具有特殊意義cron並且必須轉義。參見例如

您可能會發現為行組賦予了相同的時間戳——這可能是因為生成它們的程序正在緩衝其輸出。如果您的系統可以使用unbufferstdbuf實用程序,則可以執行如下所述的行緩衝:

引用自:https://unix.stackexchange.com/questions/573073