crontab 通过附件输出文件

crontab 通过附件输出文件

我无法通过电子邮件接收 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

相关内容