Bash
如何將輸出從 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/)
如果您有(或可以從自製軟體中獲得) 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
並且必須轉義。參見例如您可能會發現為行組賦予了相同的時間戳——這可能是因為生成它們的程序正在緩衝其輸出。如果您的系統可以使用
unbuffer
或stdbuf
實用程序,則可以執行如下所述的行緩衝: