crontab是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。在web开发时也经常用到crontab去定时执行某些程序进行某些操作。昨天写了个PHP程序每天0时生成一份统计数据。和平常一样,先把程序写完了,执行了一下正常,又去服务器上敲crontab -e编辑。写下:
0 0 * * * /***/php /***/xxx.php
原以为可以高枕无忧地睡大觉去了,谁知道0点的时候去服务器上看,发现并没有生成统计数据。赶紧看crontab,看过N遍也没有问题。接着看程序,原来程序并未指定程序目录。PHP在做crontab的时候,需要先用chdir()函数指定程序的目录,至于为什么,我也说不清楚。总之没有就会出现找不到指定目录的情况。修改完程序又改crontab,当时服务器上的时间是0:10分,我就把crontab的时间设置改成:
11 0 * * * /***/php /***/xxx.php
原以为这次可以正常生成了,结果一会发现仍然没有。赶紧再去看程序,路径都对。又写了个特别简单的小程序去测试。结果发现仍然没有出现想要的结果。又去查看服务器上的目录权限,也没有问题。
今天早上,又郁闷了许久,这种情况直到我看错时间的那一刻才结束。我把crontab的时间多设置了几分钟。本没报太大希望,结果惊喜地发现居然成功了,又测试了几次,也没问题。最后总结出了一个经验,crontab的时间设置需要至少和现在的时间相差2秒以上,如果设置当前时间的下一秒,crontab是不会执行程序的,只有等到下次时间满足条件才会执行程序。
转载于:https://blog.51cto.com/kiddymeet/22871