以下将stdout写入日志文件并打印stderr:
bash script.sh >> out.log
这又将stdout和stderr写入日志文件:
bash script.sh >> out.log 2>&1
如何组合这两个功能,以便将stdout和stderr记录到文件中,并将stderr通过电子邮件发送到我的收件箱?
答案 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
同时拥有stderr
和stdout
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
模仿邮件。将其替换为实际执行邮件的命令。