如何将日期添加到 stderr (不是文件名,而是日志文件内)?

如何将日期添加到 stderr (不是文件名,而是日志文件内)?

我有一个crontab条目:
00 10 * * * test.sh>>output_log 2>>error_log

但我还想将日期包含在每天的开始行中output_logerror_log

我怎样才能实现这个目标?

我试过:

{ echo `date` && . test.sh; }>>output_log 2>>error_log

但它仅在 output_log 中包含日期,因为echo date不被视为stderr因此不包含在2.

我想要这样的伪代码:

{ echo `date` && . test.sh }>>output_log { echo `date` plus 2's content } >>error_log  

答案1

最简单:

0 10 * * * { date; date >&2; test.sh; } >> output_log 2>> error_log

使用tsMoreutils 中的实用程序可能也很有趣,它将在每一行前面添加一个时间戳:

SHELL=/bin/bash
0 10 * * * test.sh > >(ts >> output_log) 2> >(ts >> error_log)

(请注意 的使用/bin/bash,因为最基本的 POSIX/bin/sh不支持>()重定向构造。)

答案2

我想如果你crontab按如下方式改变你的路线,你会得到你想要的——或者至少是我想要的思考你要。如果它不符合您的意愿,请发表评论。您可能还希望编辑您的问题以阐明您的目标。

crontab用于测试/评估的原型条目:

* * * * * { cat hellofile_NOFILE.txt ; echo $(date) | tee -a error_log; } >> /home/pi/output_log 2>>/home/pi/error_log

我没有你的test.sh脚本,所以我用了cat file。为了在 中创建错误cat,我只是指向一个不存在的文件 - 发送一些输出以stderr验证它是否进入 的文件error_log

error_log您想要和中的日期时间戳记output_log。管道传送datetee -a error_log应该在错误日志中放置一个时间戳。

我替换&&;因为我认为您想要一个日期时间戳,即使cat(或在您的情况下test.sh)无法执行。

我知道这与你的问题不完全相符。我这样提出来是为了让你测试一下逻辑。如果逻辑是正确的,我认为它“翻译”到你的情况如下:

修改后的crontab条目:

00 10 * * * { test.sh ; echo $(date) | tee -a error_log; } >> output_log 2>> error_log

相关内容