【操作系统】Crontab运行相关问题以及解决方法

本文探讨了在操作系统中使用Crontab时可能遇到的问题,包括任务调度不准确、日志记录缺失等方面,并提供了相应的解决策略,旨在帮助读者更好地理解和解决Crontab相关问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Crontab运行相关问题以及解决方法

By Katana

 

 1.mysql等语句在crontab不能执行的问题

    这个是一个运维人员必定会遇到的经典问题,经常在客户端调试没有问题的脚本,到了crontab定时执行的时候就执行不了。

    这是由于crontab不加载用户环境变量导致

    crontab调用默认PATH是/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin或者更少,例如mysql等命令不在此路径中

    解决方法:

    脚本中所有的命令和工具使用绝对路径例如/usr/local/bin/mysql,或者在脚本前面执行一下profile文件:. /etc/profile即可

 

 2.crontab执行结果不对

    例如:

    判断一个文件生成时间是每天18:00生成的

    -rw-r--r--  1 user  user   30555594 2009-05-15 18:00 text.txt

    if [ `ls -al test.txt |awk ’{print $7}’` == "18:00" ]

    then

        ………………

    fi

    在客户端测试没有问题,可是放到crontab中,就判断不对了。

 

    其实这还是用户环境的问题,

    客户端登陆的时候会自动加载/etc/sysconfig/language(一般在/etc/profile文件中加载),

    其中有的机器会设置客户端字符集:

    RC_LANG="en_US.ISO-8859-1"

    使用env|grep LANG的结果是

    LANG=en_US.ISO-8859-1

    这个时候ls等命令的结果是:

    -rw-r--r--  1 user  user   30555594 2009-05-15 18:00 text.txt

    时间在第七个字段。

    当crontab自动执行的时候,字符集没有设置

    使用env|grep LANG的结果是空

    这个时候ls等命令的结果是:

    -rw-r--r-- 1 mqq mqq   12785 May 15 18:00 text.txt

    时间在第八个字段,判断第七个字段为时间的脚本就出错了。

    解决方法:

    这个时候在脚本前面加上export LANG=en_US.ISO-8859-1或者执行一下profile文件:. /etc/profile即可

 

 3.crontab占用大量机器资源

    日志服务器172.16.0.100偶尔出现crond占用了cpu非常高的情况

 

    使用pstree查看是调用stat_day_log.sh这个脚本导致crond占用cpu过高

 

    查看crontab的配置:

    */10 * * * * /usr/local/dev/Y_script/stat_day_log.sh 5

    然而执行这个脚本,非常快就完成了,一点也不占用资源

    而且理论上,及时脚本非常占用资源,调用它的crond也不会占用资源才对。

 

 

    再次执行脚本发现,脚本有错误输出:

    gzip: Y.YUiS_20090602.log.gz: No such file or directory

    于是想到,会不会是由于crontab没有默认tty(默认输出)导致呢?

    于是加上

    */10 * * * * /usr/local/dev/Y_script/stat_day_log.sh 5  2>&1 >> /usr/local/dev/Y_script/stat_day_log.log

    果然问题解决了。为了确认到底是正常输出还是错误输出导致crontab僵死,进行了以下两个配置:

    */10 * * * * /usr/local/dev/Y_script/stat_day_log.sh 5  >> /usr/local/dev/Y_script/stat_day_log.log

    还是有问题。

    于是可以确认是由于crontab没有将默认错误输出重定向到指定文件导致。

    这种问题也不是一定重现,只有负载很高的时候偶尔会出现(一出现就会造成机器僵死宕机)。

    解决方法:

    养成良好的习惯,crontab默认加上错误日志重定向,如果不需要错误日志信息,也需要加上:> /dev/null 2>&1

 

本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.youkuaiyun.com/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:1780551083@qq.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值