如何仅从 cron 作业中为 stderr 添加时间戳并发送到文件?

问题描述 投票:0回答:1

我有一个 cron 作业,它运行 python 脚本并仅将 stderr 写入日志文件。 * * * * * python /home/hydro/cron.py 2>> /home/hydro/uhoh.log

我想要的是它附加到日志文件的每一行的时间戳。我正在努力弄清楚如何仅使用 stderr 来做到这一点;我找到了多种使用 
2>&1

处理 stderr 和 stdout 的解决方案,但这不是我想要的。我按照

这篇文章
尝试了这样的事情: 时间戳.sh

#!/bin/bash while read x; do echo -n `date +%d/%m/%Y\ %H:%M:%S`; echo -n " "; echo $x; done

我的计划任务:

* * * * * python /home/hydro/cron.py 2 | /home/hydro/timestamp.sh >> /home/hydro/uhoh.log

这会邮寄错误并创建一个 
uhoh.log

文件,但不向其中写入任何内容。这是我收到的邮件...

/home/hydro/timestamp.sh: line 1: syntax error near unexpected token `most'
/home/hydro/timestamp.sh: line 1: `Traceback (most recent call last):'
Traceback (most recent call last):
  File "/home/hydro/cron.py", line 2, in <module>
    x = 10/0
ZeroDivisionError: division by zero
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
BrokenPipeError: [Errno 32] Broken pipe

我也尝试过这个:

* * * * * python /home/hydro/cron.py 2> | /home/hydro/timestamp.sh >> /home/hydro/uhoh.log

这会产生一个语法错误,该错误会邮寄给我。没有产生 
uhoh.log

我想要的可能吗?还是 stderr 必须与 stdout 结合起来?

cron
1个回答
0
投票

* * * * * python /home/hydro/cron.py 2>&1 1>/dev/null | /home/hydro/timestamp.sh >> /home/hydro/uhoh.log

这会将 stderr 重定向到 stdout 所在的位置。然后它将 stdout 重定向到“黑洞”,即 /dev/null。这意味着只剩下 stderr,它通过管道传输到我的时间戳脚本并最终附加到日志文件中。

我最终将 stderr 发送到我的日志文件,并且 stderr 或 stdout 都没有发送到邮件。

© www.soinside.com 2019 - 2024. All rights reserved.