我正在运行以下 cron 作业:
/home/ubuntu/scripts/austria/archive.sh >> /home/ubuntu/logs/austria/archive.log 2>> /home/ubuntu/logs/austria/archive.err
每次脚本运行时,它都会生成一个常规日志文件,如果出现错误,它会使用错误更新 .err 文件。但是,我想知道错误是否可能还包括错误日期在日志。我对 crontab 很陌生,我很难让这种情况发生。谢谢!!
答案1
将输出通过管道传输到ts(1)
其他moreutils
类似的实用程序,这些实用程序为任何输入添加时间戳前缀:
% (echo hi; sleep 3; echo there) | ts
Aug 28 18:52:42 hi
Aug 28 18:52:45 there
%
因此,假设您只想标准错误上的时间戳:
...archive.sh 2>&1 >>.../out.log | ts >>.../err.log
请注意,这确实很棘手,而且 shell 重定向必须完全按照编写的方式进行,这一点很重要。这是我用来验证 shell 重定向的方法:
$ perl -le 'print "out"; warn "err!\n"' 2>&1 >> out | sed 's/^/blah /' > err
$ cat out
out
$ cat err
blah err!
另一种选择是将输出通过管道传输到logger
,在这种情况下,syslog 会在日志中添加时间戳前缀,然后将日志转储到某个日志文件中,具体取决于 syslog 守护程序设置。
另一种选择可能是直接编辑archive.sh
以包含发送到 stderr 的所有内容的适当date
调用输出:
echo `date` oh no >&2