我有一个crontab
条目:
00 10 * * * test.sh>>output_log 2>>error_log
但我还想将日期包含在每天的开始行中output_log
。error_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
使用ts
Moreutils 中的实用程序可能也很有趣,它将在每一行前面添加一个时间戳:
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
。管道传送date
到tee -a error_log
应该在错误日志中放置一个时间戳。
我替换&&
为;
因为我认为您想要一个日期时间戳,即使cat
(或在您的情况下test.sh
)无法执行。
我知道这与你的问题不完全相符。我这样提出来是为了让你测试一下逻辑。如果逻辑是正确的,我认为它“翻译”到你的情况如下:
修改后的crontab
条目:
00 10 * * * { test.sh ; echo $(date) | tee -a error_log; } >> output_log 2>> error_log