将stdout和stderr重定向到文件,将stderr重定向到stdout

时间:2014-06-02 19:21:20

标签: linux bash cron

以下将stdout写入日志文件并打印stderr:

bash script.sh >> out.log

这又将stdout和stderr写入日志文件:

bash script.sh >> out.log 2>&1

如何组合这两个功能,以便将stdout和stderr记录到文件中,并将stderr通过电子邮件发送到我的收件箱?

4 个答案:

答案 0 :(得分:3)

bash script.sh 2>&1 >> out.log | tee -a out.log

首先,我将 stdout 重定向到文件,将 stderr 重定向到标准输出标准输出行转到 out.log 文件和 stderr 到管道。)

tee命令将 stdin 打印到标准输出和文件(与字母 T 相似)。第二,我将原来的 stderr 打印到 stdout out.log 文件(-a参数意味着< EM>追加)。

答案 1 :(得分:0)

您可以将stdout保存在单独的文件中,将stderr保存在单独的文件中:

0 * * * * bash script.sh > out.log 2> err.log

然后给自己发送电子邮件err.log文件。

答案 2 :(得分:0)

这是一个有效的解决方案:

./myscript.sh &> all.txt 2> stderr.txt
  • &> all.txt同时拥有stderrstdout
  • 2> stderr.txt只有stderr

然后只需对这些文件执行任何操作,例如电子邮件日志记录!

答案 3 :(得分:0)

使用流程替换,您可以尝试:

0 * * * * bash script.sh >> out.log 2> >(exec tee >(exec cat >> mail))

0 * * * * bash -c 'exec bash script.sh >> out.log 2> >(exec tee >(exec cat >> mail))'

exec cat >> mail模仿邮件。将其替换为实际执行邮件的命令。