如何使用 cron 为日志输出条目添加时间戳?

Posted

技术标签:

【中文标题】如何使用 cron 为日志输出条目添加时间戳?【英文标题】:How to add timestamp to log output entries with cron? 【发布时间】:2018-07-15 17:17:11 【问题描述】:

我正在尝试使用 cron 安排 htcacheclean 每半小时运行一次。服务本身运行良好,但我不知道如何获取时间戳以附加到日志条目本身(而不是 cron-log 文件名)。

我无法在任何地方找到关于如何将时间戳添加到日志条目本身的答案。我只看到有关如何将日期时间戳添加到 cron 日志文件名的问题和答案,这不是我想要做的。

这就是我现在在crontab -e 中的内容:

0,30  *   *   *   *       /usr/sbin/htcacheclean -v -n -t -p/var/cache/apache/mod_disk_cache -l1M >> /path/to/cron-output.log 2>&1

目前我的输出是这样打印的:

Statistics:
size limit 1.0M
total size was 167.4K, total size now 167.4K
total entries was 5, total entries now 5

现在我只需要在“统计”之前的日志条目旁边显示一个时间戳。

编辑:

我正在尝试做的示例:

0000-00-00 00:00:00: Statistics:
size limit 1.0M
total size was 167.4K, total size now 167.4K
total entries was 5, total entries now 5

我想添加年、月、日、时、分和秒。

提前谢谢!

解决方案:

我想按照@glenn jackman 的建议在此处添加完整的解决方案。

0,30  *  *  *  *     printf "\%s: " "$(date "+\%F \%T")"; /usr/sbin/htcacheclean -v -n -t -p/var/cache/apache/mod_disk_cache -l1M ;  >> /path/to/cron-output.log 2>&1

在 cron 任务中添加 printf 命令后,现在我的输出如下所示:

2018-02-05 21:10:01: Statistics:
size limit 1.0M
total size was 1009.0K, total size now 1009.0K
total entries was 24, total entries now 24

【问题讨论】:

您是否希望每条记录都有唯一的时间戳。还是在所有记录上都有 crontab 进入时间就足够了?请使用示例输出记录更新您的 Q。祝你好运。 @shellter 每个条目都有唯一的时间戳。你的意思是样本输出,包括我想要的时间戳类型?它将是 Y/m/d H/M/S(年、月、日、小时、分钟、秒),然后是 htcacheclean 的输出。 日志记录计算时间的来源是什么?理想情况下,它应该是生成日志输出的程序。是的,请使用您输入所需的确切输出更新您的 Q,包括一些虚拟时间戳。否则,人们很可能会误解您的要求。并且您的系统是否有新版本的gawk 可用。祝你好运。 Append current date to the filename via Cron?、Sending cron output to a file with a timestamp in its name、How to add the logs to a crontab with time stamp、How can cron output to a new log file based on date?、How to log cron jobs? 等可能重复 【参考方案1】:

您可以在 cron 条目中使用 date 命令,如下所示:

0,30 * * * *  printf "\%s: " "$(date "+\%F \%T")"; /usr/sbin/htcacheclean -v -n -t -p/var/cache/apache/mod_disk_cache -l1M ;  >> /path/to/cron-output.log 2>&1
# ...........^.^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.........................................................................^^^

printf 有点复杂,但它会根据需要抑制换行符。

已编辑以转义百分号。请参阅下面的 cmets。

【讨论】:

谢谢@glenn jackman,这行得通。我不得不通过在日期的 '%' 符号前面添加反斜杠来对其进行轻微修改,因为 cron 将在 printf " 处停止执行。这对我有用: printf "\%s: " "$(date "+\%F \%T")"; /usr/sbin/htcacheclean -v -n -t -p/var/cache/apache/mod_disk_cache -l1M ; >> /path/to/cron-output.log 2>&1 是的,我忘记了。这是 crontab 中经常犯的错误。 是否可以使用 bashrc 函数,例如 print_date();命令 >> 日志文件?试图缩短 cron 作业。【参考方案2】:

我正在使用这个。

#backup.sh
(date; /usr/bin/rsync -au  /sorcedir/ /dest/dir) &> /somedir/logfile.log

#crontab -e
*/30 */1 * * * /bin/bash /somedir/backup.sh

【讨论】:

以上是关于如何使用 cron 为日志输出条目添加时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

将 cron 条目添加到 XAMPP 服务器

如何使用 Node.js 库 Winston 为日志添加时间戳?

ASP.NET VB 如何在 sqldatabase 上添加/使用时间戳

Powershell - 如何处理非时间戳日志文件条目,包括空行

cron 如何根据日期输出到新的日志文件?

每个日志条目带有时间戳的 log4j