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

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

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

我已尝试以下所有方法:

/root/myscript.sh | tee output.txt | mail -s "Email subject" [email protected]

/root/myscript.sh | tee output.txt | mail -s "Email subject" [email protected] &> /dev/null

/root/myscript.sh | tee output.txt && mail -s "Email subject" [email protected] < output.txt &> /dev/null

/root/myscript.sh > tee output.txt && mail -s "Email subject" [email protected] < output.txt &> /dev/null

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

答案1

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

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

/root/myscript.sh 2>&1 | tee output.txt | mail -s "Email subject" [email protected]

然后您应该会在中看到所有脚本的输出output.txt

相关内容