crontab 定时任务中,mutt命令不生效,直接执行生效

环境: CentOS 6.3

背景: 对mysql 添加监控后,便对其增加了定时任务,希望获得每天的监控状况,采用了mutt发送邮件,然而指定的时间点却木有收到邮件~~~,直接测试是可以收到邮件的啊~~~

解决方案 (共三种):

1. 将 mutt 发送邮件方式,修改为mail 

原始为:mutt -s "$MAIL_TITLE" "$MAIL" < monitor.txt

更改后: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  

(/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

(由于总结的很好,想看细节的可跳转过去哈~~~)

猜你喜欢

转载自blog.csdn.net/u014001964/article/details/80623317