要用到Crontab定时任务去执行一个Shell脚本监控Linux系统资源并且当一些数字超过预设的话发送邮件警告。首先是linux的sendmail功能无法满足我们使用SMTP服务器并且指定发送者(E.g. OS_Monitoring@ABC.com)的邮箱。查了下发现mailx可以跨过系统原来的sendmail服务透过登录外部SMTP来发邮件,不过Redhat5自带的mailx版本有问题,只好升级到最新的版本mailx-12.4而且关闭sendmail服务。(具体可以参照http://url.cn/UroamQ

装完之后mailx命令行就可以发送邮件了。开始折腾Shell脚本,但是发现通过命令执行该Shell文件的时候监控结果可以发送邮件,可是通过Crontab做成定时的任务,却跑了之后没有邮件发送。查google查百度后发现,crontab是不会缺省的从用户profile文件中读取环境变量参数,经常导致在手工执行某个脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错。

于是乎把Shell里面用到的所有路径都该成绝对路径,但还是不行。而且发现Crontab运行发送邮件命令的时候,总有以下报错:

XXX@XX.com... Connecting to [127.0.0.1] via relay...

XXX@XX.com... Deferred: Connection refused by [127.0.0.1]

手动跑这个shell就没这个报错。以为是要把SMTP服务器加进/etc/hosts. 加了却也一样报错。

记得这个错误信息应该是之前sendmail服务没开启时候运行Mail (不是Mailx)命令出现过。 所以开始怀疑是crontab用错了Mail而非Mailx, 有点眉目就简单了。

在Shell里把crontab运行时的Path echo出来再跟手动运行时候的Path做个对比:

一比就知道问题可能出在哪里了,手动运行的Path里面,/usr/local/bin在前/bin在后,而crontab运行时Path里面/bin在前面。

再进去/bin里面看下mailx,发现原来是link到sendmail的mail去了。难怪crontab总调用sendmail来跑

[root@ xxxxxxxx bin]# ls -latr mailx

lrwxrwxrwx 1 root root 4 Jan  1  2012 mailx -> mail

[root@ xxxxxxxx bin]#

知道问题就容易解决了,在shell里面加入export PATH=/usr/local/bin:$PATH (等于把/usr/local/bin 和/bin对调,让/usr/local/bin里面的mailx被调用)

测试了下能收到邮件!事实证明crontab跑脚本还是要很小心的。特别是会调用到java或者第三方程序的crontab。

Crontab使用mailx的一点发现的更多相关文章

  1. iOS关于error can't allocate region的一点发现

    调试的时候出现error can't allocate region错误,后来去搜了下网上关于这个错误的帖子,是这么说的:error can't allocate region 程序运行报错,在xco ...

  2. 关于使用jQuery操作dom时的一点发现

    <body> <ul> <li>list item 1</li> <li>list item 2</li> <li> ...

  3. linux中历史命令的一点发现

    在LINUX中的终端中输入命令之后,这些命令会被存储到一个文件中,在终端中按下 键盘上的向上的箭头就会显示出以前敲击过的命令,最关键的是重起电脑之后依然有效的,这点和 windows上的CMD有着很大 ...

  4. tp3.2框架中使用volist输出混乱的一点发现

    在tp框架中,volist真的是一样很好用的东西,但是要是不注意,用起来也会有问题的 在Controller层中,将数据assign到页面 $this->assign('vo',$news); ...

  5. 关于android的2.2与4.4的文件读取的一点发现

    好久没有写文章了,本来想写的东西,时间一长,就感觉不想写了.没什么用,到用时.又不知道去哪找了或怎么解决. 有一句话说的好啊,好记性不如烂笔头. 我要做到善于总结.及时整理,额............ ...

  6. CentOS(八)--crontab命令的使用方法

    crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 在 ...

  7. scrapy使用crontab定时任务不能自动执行的调试

    在用crontab进行定时任务时,发现任务并没有执行.而手动bash yourshell.sh时可以正常的执行程序.以下是个人的解决流程. 一.将错误打印打out.log */10 * * * * b ...

  8. 每天一个linux命令(56)--crontab命令

    上一节学习了 at  命令是针对仅运行一次的任务,循环运行的例行性计划任务,Linux 系统则是由 cron(crond)这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...

  9. You (root) are not allowed to access to (crontab) because of pam configuration

    巡检发现一台Linux服务器上的作业没有如期发送邮件,登录服务器检查后发现作业并没有执行,于是检查一下crontab的设置.结果发现如下错误: [root@mylnx2 ~]# crontab -l ...

随机推荐

  1. opennebula 编译日志

    [root@localhost opennebula-]# scons mysql=yes scons: Reading SConscript files ... Testing recipe: xm ...

  2. SQL 表锁(转)

    其实你可以使用事务处理   比方说在一个字段里面添加一个boolean 的字段当你要处理该字段的时候就 True 哪么别的人都不可以进行操作 如果是False 哪么就可以进行操作--呵可--我是这样的 ...

  3. 【不积跬步,无以致千里】AMQP协议介绍

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  4. Invoke-Express 执行多个批处理命令的函数

    function Mult_ping ($ips) { # $cmdline = "PIng" foreach ($ip in $ips) { $cmdline = "p ...

  5. Hibernate中的session对象update方法的使用

    使一个游离对象转变为持久化对象.例如以下代码在session1中保存了一个Customer对象,然后在session2中更新这个Customer对象: Customer customer = new ...

  6. flex-mp3

    Mp3Player.as package ddw.adobe { import flash.events.Event; import flash.events.IOErrorEvent; import ...

  7. Codeforces Gym 100513G G. FacePalm Accounting 暴力

    G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...

  8. c# windowsForm打印

    在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .net Framework的打 印功能都以组件的方式提供,为程序员提供了很大的方便,但是 ...

  9. Android Studio升级后projectBuild failed.

    近期在升级Android Studio后,发现原先能编译通过的project,突然就编译只是了,原因是生成的AndroidManifest.xml文件里有乱码. 升级后: android studio ...

  10. Delphi 7连接MySql 5.5.15

    原文:http://blog.csdn.net/akof1314/article/details/6822902/ 网上有很多关于Delphi连接MySql数据库的文章,在这里,我只记录下自己测试过的 ...