分享一次Linux任务计划crontab不执行的问题排查过程

朋友弄了一个小项目,要我帮忙做下Linux系统运维,上线一段时间后,发现项目偶尔会挂掉导致服务不可用。开发朋友一时之间也没空去研究项目奔溃的根因,只好由我这个运维先写一个项目进程自拉起脚本,通过Linux任务计划每分钟检查一下进程是否存在来避免项目挂了没人管的情况。分享一次Linux任务计划crontab不执行的问题排查过程

自拉起脚本很简单,随便写几行就搞定了:

然后丢到 crontab,1分钟执行一次:

本以为万事大吉了,结果还是坑了,进程再一次挂了,尼玛什么鬼?

一、检查日志

根据经验,先看一下crontab的日志:

tail /var/log/messages

没发现相关日志,看来不是打印到了这,于是查看了下crontab的默认日志位置:

tail /var/log/cron

很明显,任务计划确实在正常执行着,看来问题在脚本上了。

二、检查脚本

①、直接执行

检查脚本第一步,直接按照crontab里面的命令行,执行脚本:

结果进程正常拉起了!

直接执行成功,而放到crontab就失败,经验告诉我肯定的脚本环境变量有问题了!

②、环境变量

于是在脚本里面载入环境变量:

然后手工把进程杀死,等待自拉起,结果... 还是不行!

③、系统邮件

经验告诉我,crontab执行失败,如果没有屏蔽错误的话,会产生一个系统邮件,

位置在 /var/spool/mail/root

所以,我把crontab里面的 2>&1 这个屏蔽错误先取消掉,等待几分钟查看邮件。

cat /var/spool/mail/root 发现有如下报错:

居然是脚本里面的sudo执行失败了,找不到这个文件。看来单纯的载入 profile 不一定靠谱啊!

③、修复脚本

知道问题所在,解决就简单了,粗暴点,直接写入sudo的绝对路径 /usr/bin/sudo

继续测试自拉起,结果... 还是不行!R了G了!!

三、最终解决

继续查看了下系统邮件,发现如下信息:

很明显,提示了sudo必须需要tty才能执行,解决很简单,取消这个限制即可!

编辑 /etc/sudoers ,找到 Defaults    requiretty, 然后注释掉这行:

最后使用 :x! 或 :wq! 强制保存即可。

结果观察还是报了相同的错误!原来改完这个sudo并不会影响已经运行的crontab,所以需要重启crontab服务刷新下设置:

这下终于可以了!

四、分析总结

Linux系统里面计划任务,crontab 没有如期执行这是运维工作中比较常见的一种故障了,根据经验,大家可以从如下角度分析解决:

①、检查crontab服务是否正常

这个一般通过查看日志来检查,也就是前文提到的 /var/log/cron 或 /var/log/messages,如果里面没有发现执行记录,那么可以重启下这个服务:service crond restart

②、检查脚本的执行权限

一般来说,在crontab中建议使用 sh 或 bash 来执行shell脚本,避免因脚本文件的执行权限丢失导致任务失败。当然,最直接检查就是人工直接复制crontab -l 里面的命令行测试结果。

③、检查脚本需要用到的变量

和上文一样,通常来说从crontab里面执行的脚本和人工执行的环境变量是不一样的,所以对于一些系统变量,建议写绝对路径,或使用witch动态获取,比如  sudo_bin=$(which sudo) 就能拿到 sudo在当前系统的绝对路径了。

④、放大招:查看日志

其实,最直接最有效的就是查看执行日志了,结合crontab执行记录,以及crontab执行出错后的系统邮件,一般都能彻底找到失败的原因了!当然,要记住在crontab中如果屏蔽了错误信息,就不会发邮件了。

这又让我想起了如果crontab未屏蔽日志,可能会导致硬盘 inode 爆满 ==> 历史文章传送门 ,感兴趣的童鞋也可以谷歌一下 /var/spool/clientmqueue/ 这个关键词了解下。

好了,本文分享到此,希望对你有所帮助!

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:23   其中:访客  20   博主  3

  1. 小C博客 4 来自天朝的朋友 QQ浏览器 Windows 7 浙江省杭州市 电信

    大神,我表示看不懂!!

  2. 憧憬Licoy 4 来自天朝的朋友 QQ浏览器  Android 5.1 m2 note Build/LMY47D 广东省广州市 网易计算机系统

    我也表示看不懂。

  3. 电影天堂迅雷下载 4 来自天朝的朋友 谷歌浏览器 Windows 8.1 四川省自贡市 电信

    看懂有点迷糊

  4. 小青年 0 来自天朝的朋友 谷歌浏览器 Windows 7 安徽省合肥市 电信

    你个坑货 之前找你帮忙搞下apache经常死掉 然后搞个自动重启的脚本 到现在没搞定呢 :razz:

  5. 心系与她 2 来自天朝的朋友 QQ浏览器 Windows 7 山西省太原市 联通

    谢谢,张哥分享,不过还是很多人用不到的

  6. D8C9时尚 0 来自天朝的朋友 搜狗浏览器 Windows 7 山东省济南市 联通

    一直在关注你把http改成https,半年过去了,我感觉效果差极了。目前来看你今年以来的文章不仅https没有收录,连http也没有收录了。目前就百度一直在宣传https吧,虽然百度也一直没收录https,其他搜索引擎好像都没啥表示。最让我困惑的是最近豆瓣也改成了https,难道仅仅是出于安全考虑吗。没有收录对一个依赖seo来流量的网站是致命的。不知博主怎么看待这个问题。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

      目前来看,比较前卫,也没L 用,个人博客我也不推荐折腾https。
      我使用https主要是为了折腾学习,然后跟上趋势。

      • 憧憬Licoy 4 来自天朝的朋友 QQ浏览器 Windows 7 四川省 电信

        我的也是https,最近我的文章不到一天百度就收录了,虽然是http的链接,但是也是有所改变的。

        • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

          也许是我博客的问题吧

        • 小超 4 来自天朝的朋友 谷歌浏览器 Windows 7 海南省海口市 电信

          你好,请问你是怎么设置的呀,我的也是https的,但是收录一直不乐观,而且还在掉

        • 小超 4 来自天朝的朋友 谷歌浏览器 Windows 7 海南省海口市 电信

          刚查看了一下你的收录情况,貌似也不是很乐观,今年貌似只有2月份的一条 :???:

          • 憧憬Licoy 4 来自天朝的朋友 火狐浏览器 Windows 10 四川省 电信

            不是啊,是不是看错了呃

  7. 刷百度下拉软件 0 来自天朝的朋友 谷歌浏览器 Windows XP 浙江省嘉兴市 电信

    liunx 系统的不太懂了

  8. 小超 4 来自天朝的朋友 QQ浏览器 Windows 7 海南省 电信

    哈哈,张戈大神,发现你的静止复制,删掉了咯 :mrgreen:

  9. 电影迅雷下载 4 来自天朝的朋友 谷歌浏览器 Windows 8.1 四川省自贡市 电信

    Linux系统很安全

  10. 三国演义 3 来自天朝的朋友 谷歌浏览器  MX4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.76 Mobile Safari/537.36 广东省广州市 电信

    博主的网站挺快的,请问你有用CDN吗,免费的百度云加速,好像没效果一样,能不能推荐一下你用的CDN和图片存储方法

  11. boke112导航 5 来自天朝的朋友 谷歌浏览器 Windows XP 广西南宁市 /桂林市

    没有真实去接触或折腾过Linux,真的看不太懂,只能路过了

  12. 四川卫校 1 来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市 联通

    还是不懂。。

  13. 乱糟糟的小青年 1 来自天朝的朋友 搜狗浏览器 Windows 10 上海市浦东新区 电信

    我遇到问题就是里面绝对路径问题和一些变量,博主你这个我还真没有碰到过,这里吸收下

  14. 成航先森 5 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

    我遇到的问题,是计划任务里的脚本里,已经把导出的路径改了,但定时后还是导出到原来的文件中去了,不知道怎么回事。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

      贴出你的代码才好分析~~

      • 成航先森 5 来自天朝的朋友 谷歌浏览器 Windows 7 四川省成都市 电信

        没事,找到原因了,还是简单的环境变量问题,用了ifconfig命令。

  15. Honest1y 0 来自天朝的朋友 谷歌浏览器 Windows 10 陕西省西安市 电信

    表示数据库自动备份脚本遇到过这个问题,手动执行一切正常, 放crontab里面就没有执行备份,直接进行了打包,导致近一周数据未备份。。。。也是看日志发现脚本里面的mysqldump命令路径不对。。。R了G了

加载中,请稍候...