天天看点

crontab排查一例

首先QA部门反馈过来有70台机器在work用户下周期性定时任务无法执行,其他的400台服务器执行此命令没有问题,

crontab -e中写入:

44 */4 * * * `source /etc/profile;source /home/work/.bash_profile;/home/work/staf/extbin/atd/atdupdate`

首先我们从crontab入手,把此命令拿出来单独执行,没有问题。

第二:我把他得日志都打印到/home/work/xiaowei.log中,如下所示:

44 */4 * * * `source /etc/profile;source /home/work/.bash_profile;/home/work/staf/extbin/atd/atdupdate >>/home/work/xiaowei.log 2>&1`

这样暴露出几台机器因为/home/work空间不足写入不进文件中。查看命令:

[[email protected] /]# du -sh /home/work  #s是汇总,h是以更优雅的方式显示

459G    /home/work

[[email protected] /]# df -lh

Filesystem            Size  Used Avail Use% Mounted on

/dev/cciss/c0d0p2     8.7G  4.0G  4.7G  46% /

/dev/cciss/c0d0p3     462G  460G  2.2G 100% /home

这几台问题解决后,我们就开始看第二个问题:/home/work/xiaowei.log为空。

我们确认两点:

    第一:crond进程是否存在

    [[email protected] /]# service crond status

    crond (pid 16924 2416) is running...

    第二:crontab中命令是否执行

    [[email protected] /]# tail /var/log/cron

    Oct 13 14:09:01 db-testing-ps1110 crond[16712]: (work) CMD (`source /etc/profile;/home/work/staf/extbin/atd/atdupdate >>/home/work/xiaowei.log 2>&1`)

没有打日志出来,我们进行的操作是service crond restart 和service syslog restart 

这样我们又清理出一批机器出来。

          第三:确认命令问题:我们执行了一条最简单的命令:

    * * * * * mail -s "aaaaa" [email protected] </etc/passwd

    这样又把一批crontab本身有问题的筛选出来了。

    第四:命令的问题,我们通过分命令执行的方式:

    首先测试他的基本命令:/home/work/staf/extbin/atd/atdupdate能够打印出日志,然后测试source /etc/profile /home/work/staf/extbin/atd/atdupdate 也能打印出日志,但是把命令写全就打印不出日志了,说明问题出在source /home/work/.bash_profile中。

    找到这个文件有问题的地方修改掉,就好了。

    这里面说明了几个问题,大公司的机器底层软件比较混乱,程序是你灌我也灌,系统参数你改我也改,这个是由于产品上线频率和打补丁的频率很快,造成机器基础环境不统一。这里面最好有一个一键还原的意味在里面最好

本文转自guoli0813 51CTO博客,原文链接:http://blog.51cto.com/guoli0813/405163,如需转载请自行联系原作者