一个怪异的Cron问题

一个朋友向我咨询他遇到的一个问题。

Centos的操作系统,自然是主流应用的WWW。近期无缘无故的Cron失效,所有的任务都无法执行。多次重启主机,重启Cron服务均是如此。

起先我由于没有拿到控制台,怀疑是Cron经典的环境变量问题,修改了半天也是白忙。总算此兄开恩,将root的权限给了我。:)

登入主机,crontab -l,所有命令都正常,单独执行也都OK。跑到/var/spool/cron下也没有发现有什么文件权限之类的问题。

每天都被cron mail挤爆信箱的我觉的从邮件入手吧。谁知那位兄弟没有配置邮件系统,而且直接disable了sendmail服务。

这里需要说明的是,Crontab 默认会将定时执行的结果通过mail返回给用户。如果没有启动Sendmail服务,系统(确切的应该是sendmail程序)将会把每一个结果保存为一个文件,放置在/var/spool/clientmqueue下。

cd /var/spool/clientmqueue 呵呵,果然!等了半个多小时愣是没有给list出来。du -sh 也是个费时费力的操作了。

mv * 太慢,直接 ls | xargs rm 操作,清空了所有的文件,重试了一下,搞定!

解决此类方法的建议:

  1. 开启sendmail服务,这是最佳途径。
  2. 每条命令使用 ‘>>’  指向一个日志文件,如果觉得返回没有必要,就直接  >> /dev/null 2>&1 丢弃掉。
  3. 更加变态的方式就是再加一条cron,定期清空 /var/spool/clientmqueue

PS:

之前没有弄过,完成测试的时候才理清的一个Cron问题:

30 3 * * 1 dosomething ,是每周一3点半执行是确信无疑的了。
30 3 1 * 1 dosomething, 是当1号是周一的时候执行吗?不是!是1号,或者周一的时候执行。crontab中的星期是一个“或”的概念,而非其他的“和”的概念。

推荐阅读:
去年的DCDC,我主要介绍了基
任何一个合理的应用程序的运行时
5月中旬,我参加了在加利福尼亚

“一个怪异的Cron问题”的2个回复

  1. 很不错的博客,看了一下内容,很对我胃口吖,RSS之。

    “# 每条命令使用 ‘>>’ 指向一个日志文件,如果觉得返回没有必要,就直接 >> /dev/null 2>&1 丢弃掉。”
    请问上面中的 >&1 是什么意思?&在这里有什么作用,以前看过,忘记了,但又不知道怎么Google之~

    1. 1为标准输出stdout, 2为标准错误stderr.
      ls >> /dev/null 2>&1 可以理解为“ls后结果输出到/dev/null,等价于不输出,但其中的2 标准错误输出回1,标准控制台,由于加了&,意味着后台输出到控制台。”

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据