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 ...
随机推荐
- 漫谈云计算与SOA (1)
SOA是什么? 英语直译是基于服务的架构,就是一种技术框架,促使企业内部与外部所有相关的系统公开和访问定义良好的服务和绑定于服务的信息,进一步抽象成流程层和组合应用,从而构成解决方案. 说人话:重用服 ...
- MEF 编程指南(七):使用目录
目录(Catalogs) MEF 特性编程模型的核心价值,拥有通过目录动态地发现部件的能力.目录允许应用程序轻松地使用那些通过 Export Attribute 注册自身的导出.下面列出 MEF ...
- Unix-Linux编程实践 学习点滴
1.结构体最后定义一个char p[0]有什么作用 2. 3. 4. 1.结构体最后定义一个char p[0] 有什么作用 这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势: ...
- 通过SCVMM分配iSCSI存储
除了使用基于SMB3.0应用程序的文件共享外,还可以使用iSCSI目标服务器的SAN存储,然后在SCVMM控制台中添加基于SMI-S类型的存储,步骤如下: 1.将一台安装了 iSCSI目标 功能的Wi ...
- MS509Team----------------Cknife
http://www.ms509.com/ http://www.freebuf.com/sectool/98681.html 中国蚁剑
- SQL SERVER 函数大全[转]
SQL Server 函数大全 一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下 ...
- Computer Science Theory for the Information Age-6: 学习理论——VC定理的证明
VC定理的证明 本文讨论VC理论的证明,其主要内容就是证明VC理论的两个定理,所以内容非常的枯燥,但对于充实一下自己的理论知识也是有帮助的.另外,VC理论属于比较难也比较抽象的知识,所以我总结的这些证 ...
- SQL Server 数学函数 相关
1.计算绝对值ABS ABS函数对一个数值表达式结果计算绝对值(bit数据类型除外),返回整数. 语法结构: ABS(数值表达式) 返回值:与数值表达式类型一致的数据 示例: SELECT ABS ...
- CentOS5.6 安装RabbitMQ
步骤参考官方地址:http://www.rabbitmq.com/install-rpm.html我们这个版本按照官方的不能正确安装. 1.安装erlang(官网地址http://www.erlang ...
- 视频-某hadoop高级应用-搜索提示
看了北风的免费视频,只有一个案例,苦逼买不起几百上千的视频教程 先搭建简单的web项目,基于struts,使用到了bootstrap. 界面: web.xml <filter> <f ...