Crontab使用mailx的一点发现
要用到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的一点发现的更多相关文章
- iOS关于error can't allocate region的一点发现
调试的时候出现error can't allocate region错误,后来去搜了下网上关于这个错误的帖子,是这么说的:error can't allocate region 程序运行报错,在xco ...
- 关于使用jQuery操作dom时的一点发现
<body> <ul> <li>list item 1</li> <li>list item 2</li> <li> ...
- linux中历史命令的一点发现
在LINUX中的终端中输入命令之后,这些命令会被存储到一个文件中,在终端中按下 键盘上的向上的箭头就会显示出以前敲击过的命令,最关键的是重起电脑之后依然有效的,这点和 windows上的CMD有着很大 ...
- tp3.2框架中使用volist输出混乱的一点发现
在tp框架中,volist真的是一样很好用的东西,但是要是不注意,用起来也会有问题的 在Controller层中,将数据assign到页面 $this->assign('vo',$news); ...
- 关于android的2.2与4.4的文件读取的一点发现
好久没有写文章了,本来想写的东西,时间一长,就感觉不想写了.没什么用,到用时.又不知道去哪找了或怎么解决. 有一句话说的好啊,好记性不如烂笔头. 我要做到善于总结.及时整理,额............ ...
- CentOS(八)--crontab命令的使用方法
crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 在 ...
- scrapy使用crontab定时任务不能自动执行的调试
在用crontab进行定时任务时,发现任务并没有执行.而手动bash yourshell.sh时可以正常的执行程序.以下是个人的解决流程. 一.将错误打印打out.log */10 * * * * b ...
- 每天一个linux命令(56)--crontab命令
上一节学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,Linux 系统则是由 cron(crond)这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...
- You (root) are not allowed to access to (crontab) because of pam configuration
巡检发现一台Linux服务器上的作业没有如期发送邮件,登录服务器检查后发现作业并没有执行,于是检查一下crontab的设置.结果发现如下错误: [root@mylnx2 ~]# crontab -l ...
随机推荐
- opennebula 编译日志
[root@localhost opennebula-]# scons mysql=yes scons: Reading SConscript files ... Testing recipe: xm ...
- SQL 表锁(转)
其实你可以使用事务处理 比方说在一个字段里面添加一个boolean 的字段当你要处理该字段的时候就 True 哪么别的人都不可以进行操作 如果是False 哪么就可以进行操作--呵可--我是这样的 ...
- 【不积跬步,无以致千里】AMQP协议介绍
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- Invoke-Express 执行多个批处理命令的函数
function Mult_ping ($ips) { # $cmdline = "PIng" foreach ($ip in $ips) { $cmdline = "p ...
- Hibernate中的session对象update方法的使用
使一个游离对象转变为持久化对象.例如以下代码在session1中保存了一个Customer对象,然后在session2中更新这个Customer对象: Customer customer = new ...
- flex-mp3
Mp3Player.as package ddw.adobe { import flash.events.Event; import flash.events.IOErrorEvent; import ...
- Codeforces Gym 100513G G. FacePalm Accounting 暴力
G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...
- c# windowsForm打印
在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .net Framework的打 印功能都以组件的方式提供,为程序员提供了很大的方便,但是 ...
- Android Studio升级后projectBuild failed.
近期在升级Android Studio后,发现原先能编译通过的project,突然就编译只是了,原因是生成的AndroidManifest.xml文件里有乱码. 升级后: android studio ...
- Delphi 7连接MySql 5.5.15
原文:http://blog.csdn.net/akof1314/article/details/6822902/ 网上有很多关于Delphi连接MySql数据库的文章,在这里,我只记录下自己测试过的 ...