我已经编写了一个脚本,并且一切都按照我的需要顺利运行:
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 默认查找的目录。因此我建议:
- 寻找发送邮件二进制文件(
locate sendmail
或find / -type f -name sendmail)
如果locate
未安装) - 记下要执行的完整路径发送邮件在你的脚本中
答案2
很可能sendmail
没有安装。
要安装它,请sudo apt-get install sendmail
在终端中输入。
如需进一步配置,请访问类似问题:如何在 ubuntu 上配置 sendmail?