创世神域

Nothing is impossible.

@Puteulanus5年前

01/26
15:41
学习心得

500云神坑Cron调戏方法

500云的Cron神级坑爹,最小执行时间5分钟一次不说,不能每日执行的bug蛋疼的一逼。Web Cron又容易被他拉黑,执行效率没有保障。昨晚本想试试找个解决方法的,还真找到点有趣的东西。

开始是想自己设定Cron,无奈500云禁用了system()等三个函数,SSH控制台的crontab就是个笑话,此路应该是不通了。

然后试着用copy()复制了下文件,无报错。想着能不能自己写个php定时把cron.php覆盖复制为cron2.php和cron3.php,因为之前提到过自己复制cron.php可以解决平日的问题,但复制出的cron无法被纳入自动更新范围,一旦贴吧签到助手的差量升级涉及到cron.php很容易使复制出的cron失效。如果能写三个php分别设定平日、周六、周日执行,不断把cron.php覆盖复制为cron2.php和cron3.php,再把cron.php、cron2.php、cron3.php分别设上平日、周六、周日,虽然麻烦了点,但也解决了这个隐患。

然后实际测试的时候,亮点来了。

之前看到说500云的任务计划可以用Firebug改,将执行时间改成每分钟一次,我猜任务计划的网页其实就是一个接口,负责在设定好之后把容器【选项】的值写入执行cron的地方。

那我改改星期试试?

屏幕快照 2014-01-26 14.55.59

这是星期的部分,看到平日的值是“*”不禁想起了之前在BAE设定Cron的情景。当时还有个Cron表达式的介绍。。。

假设:

1.任务计划页面是负责写入Cron的,写入内容是选择项的值而非选项。只有这样才能解释为什么可以把分钟改成选项里没有个值。

2.星期也是用的标准的cron格式,只是设定上,*被设置为了“周一到周五”。

先试试改个不存在的:

屏幕快照 2014-01-26 15.14.00

提交报错:

 

这正好印证了之前的判断,可以页面写入不存在选项中的值,却不能写入不符合Cron规范的值。

这样的话就好办了。。。

周一周二周三周四周五周六周日:

屏幕快照 2014-01-26 15.25.40

添加成功。

屏幕快照 2014-01-26 15.26.53

周一到周日:

屏幕快照 2014-01-26 15.28.44

添加成功。

屏幕快照 2014-01-26 15.29.04

这样500云的任务计划的平日问题就算完美解决了。

500云神坑Cron调戏方法