如何将 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并且必须转义。参见示例

您可能会发现多组行具有相同的时间戳 - 即可能可能是因为生成它们的程序正在缓冲其输出。如果您的系统有unbuffer或实用程序,则stdbuf可能可以强制执行行缓冲,如下所述:

相关内容