使用 cron 任务发送邮件

使用 cron 任务发送邮件

我已经编写了一个脚本,并且一切都按照我的需要顺利运行:

a=$(df -h /mnt/smb | tail -n +3 | tr -s ' ' | tr '%' ' ' | cut -d ' ' -f 5)
echo $a

if [[ $a -ge 30 ]]; then
    cat /etc/diskspace/text.txt | sendmail test.gmail.com
fi

我想通过 Cron 每分钟运行此脚本,请查看我的 crontab:

* * * * * /etc/diskspacae/vpndrive.sh

如您所见,运行此脚本后,如果驱动器空间超过 80%,我想要使用 sendmail 在我的电子邮件中获取通知。

但是当我从 Cron 运行此脚本时我没有得到它,并且我收到了此错误消息/var/spool/mail/root

ERROR Message: /etc/diskspace/vpndrive.sh line 34 : sendmail: command not found. 

答案1

不要忘记,Cron 执行的脚本是在具有有限 PATH 变量的环境中运行的。这意味着在控制台上测试脚本时,控制台 shell 将找到发送邮件没有问题。但是当从 Cron 运行时,发送邮件未找到。

为 Cron 编写脚本时的最佳做法是输入要运行的命令的完整路径,以确保万无一失。

通常情况下,发送邮件二进制文件安装在 下/usr/sbin,该路径不属于 Cron 默认查找的目录。因此我建议:

  1. 寻找发送邮件二进制文件(locate sendmailfind / -type f -name sendmail)如果locate未安装)
  2. 记下要执行的完整路径发送邮件在你的脚本中

答案2

很可能sendmail没有安装。

要安装它,请sudo apt-get install sendmail在终端中输入。

如需进一步配置,请访问类似问题:如何在 ubuntu 上配置 sendmail?

相关内容