环境: CentOS 6.3
背景: 对mysql 添加监控后,便对其增加了定时任务,希望获得每天的监控状况,采用了mutt发送邮件,然而指定的时间点却木有收到邮件~~~,直接测试是可以收到邮件的啊~~~
解决方案 (共三种):
1. 将 mutt 发送邮件方式,修改为mail
原始为:mutt
更改后:mail-s "$MAIL_TITLE" "$MAIL" < monitor.txt
其中 MAIL_TITLE 是发送的邮件的主题, MAIL 是接收者 , monitor.txt 是我添加的邮件的内容,请更换为自己的内容
此时发送邮件可用。
2. 在定时脚本中,加入以下片段
source /etc/profile
source ~/.bash_profile
其目的是使,该脚本执行的时候能够读取到用户的环境变量 (此处需要清楚自己用户环境变量设置的文件),加入后如下图所示
此时脚本中可直接使用mutt 命令发送邮件。
3. 修改定时任务,在要执行的定时任务前增加环境变量
eg:00 07 * * * . /home/work/.bash_profile;/bin/sh
(/home/work/monitorMetric.sh 是我自己需要执行的定时脚本)
此时脚本中可直接使用mutt 命令发送邮件。
以上三种改法,均可收到定时监控邮件
部分原理
基本公理: crontab 并不知道自己所使用的环境变量
从这个基本公理去理解上面三种解决方案就很容易了
1. 查看mail 和mutt 可执行文件所处的位置,可得mail 是系统可执行文件下的,而mutt 在我们自己安装的目录下
所以crontab 读取不到我们自己安装的可执行文件的环境变量, 所以mutt就会无效
2. 第二种方式是在脚本中就使所有的环境变量生效, 第三种方式是在添加定时任务的时候,告诉其所使用的环境变量
应该还有一种解决方案,即在脚本中,将mutt 改为绝对路径,应该也是可行的。
3. 可以在/var/spool/mail 中查看不同用户下定时任务的执行情况,不过我并没有在里面看到我任务中mutt失败的原因,应该是因为定时任务的执行是成功的,其中部分功能失效,不会记录在当中
补充
1. crontab 使用注意事项:http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html
(由于总结的很好,想看细节的可跳转过去哈~~~)