如何将 shell 脚本的输出作为 cron 作业邮寄

Nil*_*lpo 6 linux email bash cron bash-scripting

我创建了一个运行 shell 脚本的 cron 作业。我希望 shell 脚本运行并捕获它的输出,并在完成后通过电子邮件发送。到目前为止,这是我所拥有的,但邮件正文是空的。

我已经尝试了以下所有方法:

/root/myscript.sh | tee output.txt | mail -s "Email subject" me@mymail.com

/root/myscript.sh | tee output.txt | mail -s "Email subject" me@mymail.com &> /dev/null

/root/myscript.sh | tee output.txt && mail -s "Email subject" me@mymail.com < output.txt &> /dev/null

/root/myscript.sh > tee output.txt && mail -s "Email subject" me@mymail.com < output.txt &> /dev/null
Run Code Online (Sandbox Code Playgroud)

所有这些都正常运行,但它们会产生一封空正文的电子邮件。运行脚本确实会在 stdout 上产生输出。

AFH*_*AFH 10

重定向时丢失屏幕文本的最可能原因是输出被发送到标准错误设备。output.txt运行命令后,如果为空,这将被确认。

要重定向标准错误以及标准输出,您需要添加2>&1到您的命令中,如下所示:

/root/myscript.sh 2>&1 | tee output.txt | mail -s "Email subject" me@mymail.com
Run Code Online (Sandbox Code Playgroud)

然后,您应该会在output.txt.