邮件 stderr 输出,在 cron 中记录 stderr+stdout

邮件 stderr 输出,在 cron 中记录 stderr+stdout

我希望 cron 仅邮寄 stderr 输出,同时以正确的顺序将 stdout+stderr 记录到文件中。

我一直在摆弄T恤之类的东西,但不太对劲......

把命令包装成shell脚本就可以了

喜欢

#!/bin/bash
mycommand | maybe_some_shell_redirect_magic >> /var/log/mycommand.log

答案1

我认为这是可能的 - 同时保持行排序(即 stderr 是从写入它的进程内复制的),即使使用 POSIX shell。尝试 :

#!/bin/sh

exec 3>log
command args ... 2>&1 >&3 |while read err; do
  echo "$err" >&2
  echo "$err" >&3
done

答案2

在分离 stdout 和 stderr 时不可能准确地保持顺序。只要 stdout 和 stderr 输出的时间不太接近,您就可以获得合理的结果:

mycommand 2>>/var/log/mycommand.log | tee -a /var/log/mycommand.log

您可以使用此脚本代替 mycommand 进行测试:

#!/bin/bash
echo stdout 1
sleep 0.1
echo stderr 1 >&2
sleep 0.1
echo stdout 2
sleep 0.1
echo stderr 2 >&2

如果删除 sleep 命令,日志文件中的顺序会有些混乱。

相关内容