我无法通过电子邮件接收 crontab 输出报告的附件。我尝试了以下代码,但收到一个空白文件:
50 * * * * root touch /home/text_created >>
/home/log_crontab.txt | mail -s "Email Subject" -a "/home/log_contab.txt"
this_is_my_email
这是一个非常简单的测试,只需运行 crontab 及其电子邮件发送功能即可。上面的代码有什么问题吗?
答案1
您收到一个空白文件,因为/home/log_contab.txt
发送邮件时该文件为空。
为什么:
匿名管道( ) 两侧的进程|
同时启动;因此,当左侧的命令将 STDOUT(假设有)附加到文件时/home/log_contab.txt
,该mail
命令已完成执行(带有一个空白/home/log_contab.txt
文件作为附件,因为可能它一开始就是空的)。
为了得到你想要的,一个接一个的奔跑,有条件的:
50 * * * * command_1 && command_2
相应地更改命令。
答案2
通过管道输出的方式mail
不正确。您将输出重定向到文件,因此不会将任何内容发送到管道。当您使用管道时,这两个命令会同时运行,因此mail
无需等待第一个命令完成。
使用 依次运行它们;
。
并且touch
不产生任何输出。如果您想要记录 cron 作业成功的消息,则需要明确编写该消息。
50 * * * * root if touch /home/text_created; then echo "Touch successful"; else echo "Touch failed"; fi >> /home/log_crontab.txt 2>&1; mail -s "Email Subject" -a "/home/log_contab.txt" this_is_my_email