如何將 cron 的輸出重新導向到日誌檔案並新增時間戳記?

如何將 cron 的輸出重新導向到日誌檔案並新增時間戳記?

我的 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/)

答案1

如果您有(或可以從自製的例如)ts tstamp 實用程序,那麼你應該能夠執行類似的操作

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

/path/to/ts通常位於/usr/bin/tsLinux 系統上;也可能位於 OSX 上的另一個位置)。從man ts

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

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

您可能會發現多組行具有相同的時間戳記 - 即可能是因為生成它們的程式正在緩衝其輸出。如果unbufferstdbuf實用程式可用於您的系統,則它可能可以強制執行行緩衝,如下所述:

相關內容