使用 cron 作业发送邮件

kun*_*nal 5 cron sendmail

我写了一个脚本,一切都根据我的需要运行良好:

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
Run Code Online (Sandbox Code Playgroud)

我想通过 Cron 每分钟运行一次这个脚本,看我的 crontab:

* * * * * /etc/diskspacae/vpndrive.sh
Run Code Online (Sandbox Code Playgroud)

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

但是当我从 Cron 运行这个脚本时我还没有得到它,并且我在/var/spool/mail/root.

ERROR Message: /etc/diskspace/vpndrive.sh line 34 : sendmail: command not found. 
Run Code Online (Sandbox Code Playgroud)

Ben*_*oit 12

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

为 Cron 编写脚本时的最佳实践是放置完整路径以访问您要运行的命令,只是为了确保。

通常,sendmail二进制文件安装在 下/usr/sbin,默认情况下,该路径不是 Cron 查找的目录的一部分。所以我建议:

  1. 寻找sendmail二进制文件的位置(locate sendmail或者find / -type f -name sendmail)如果locate没有安装)
  2. 写下在脚本中执行sendmail的完整路径

  • 只需输入“which sendmail”即可找到位置 (2认同)

小智 1

很可能sendmail是没有安装。

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

如需进一步配置,请访问类似问题:How to configure sendmail on ubuntu?