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 ...
随机推荐
- Winform开发框架之通用自动更新模块(转)
在网络化的环境中,特别是基于互联网发布的Winform程序,程序的自动更新功能是比较重要的操作,这样可以避免挨个给使用者打电话.发信息通知或者发送软件等,要求其对应用程序进行升级.实现程序的自动更新, ...
- TFS代码签入指导
1. 如果文件没有被放入到TFS中, 那么它是不存在的. 这一点是最好被理解的, 如果你的代码没有被签入到代码管理中,那么就不可能被团队的其他人获取的得到. 具体如何将文件纳入到TFS中请参考 Pla ...
- UVa442 Matrix Chain Multiplication
// UVa442 Matrix Chain Multiplication // 题意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数.假定A和m*n的,B是n*p的,那么AB是m*p的,乘法 ...
- 在linux下编译netcat并且反弹cmdshell(转载)
本地Windows监听 nc -vv -l -p 1234 首先从sf上get一个tar的压缩包 wget http://sourceforge.net/projects/netcat/files ...
- iOS常用动画代码
使用前 需引入QuartzCore.framework, 并在相关文件中加入 #import "QuartzCore/QuartzCore.h" 定义 shakeFeedbackO ...
- Java中单例设计模式总结
两种单例常见的实现方式: 1:懒汉的设计模式,在第一次调用的时候才完成相关的初始化操作 懒汉式是典型的时间换空间,就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间.当然,如果一直没有人 ...
- Visual Studio 调用 Delphi DLL 会退出的解决方案
新写了一个 Delphi 的 dll 供 C# 程序调用,却发现在使用 Visual Studio 2012 进行调试时,程序会在调用后自动退出. 经过对比,只需要将工程属性中“调试”一页下的“启用 ...
- stm32上的Lava虚拟机开发进度汇报(4)
这段时间颓废了,基本上没在弄这个东西. 主要是因为前段时间把代码基本上写完之后,但是问题一大堆,除了自己写的几个简单测试程序,其他现成的东西没有一个是能正常运行的,很是郁闷,也不知道哪里有错误,所以放 ...
- Get和Post的参数传值
1. get是从服务器上获取数据,post是向服务器传送数据. 2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过 ...
- delphi 插入 HTML代码 播放器
Delphi在Webbrowser中插入 HTML/java script代码 使用方法将下面的代码赋值到1个记事本里保存,然后保存为xxx.htm就可以看到效果使用PasteHtml实现功能 的事件 ...