0
Posted on Monday, October 12, 2015 by 醉·醉·鱼 and labeled under
用ruby写了一个定期发邮件的脚本,然后又写了个sh去调这个脚本,在cron里面添加一个job定期调用这个sh文件,然后他就能够正常工作了。但是最近突然发现有时候他居然不能够发邮件了。我以为又是gmail被墙了,但是我上次已经改过host了,应该不会有问题了。而且还加了30分钟内retry的机制。


64.233.161.108 smtp.gmail.com

百思不得其解。在遇到N次这事之后,我就去看log,看邮件,看自己job的日志。突然发现一件事,不知道什么时候,cron的PID 会变成一个很小的number,然后一路往上升,直到下次又变成一个很小的number。一旦PID变成很小的number,第一个被启动的job就不会正常工作。

一般来说,cron的job被启动,会在cron.log里面有记录,在系统邮件(/var/mail)里面也有记录。如下图,在10月7日早上10点,有一个脚本被启动了,但是在系统邮件里面却没法找到对应的记录。在这个job之前和之后的job在系统邮件和cron.log里面都有记录相对应,唯独这条没有。同时,也可以看到,大概4个小时前,PID number由64348降成352。

我又找了几个例子,都能够对应我上面的结论:“一旦PID变成很小的number,第一个被启动的job就不会正常工作。

现在我只能够在我需要跑的job前一分钟再添加一个job A,啥事都不做,只是单独占个坑,这样就算倒霉也就是这个job A没法正常启动。

这都是啥奇葩的事情。