Cron修正程序

  • 2016-09-12
  • 0
  • 1

因为1分钟一次的免费Cron实在太难找,云监控频率又普遍比较低,所以写了这货。它会在前四次执行的时候记录下执行时间,计算出Cron的执行间隔,然后从第五次开始在Cron执行的间隔中依靠自身的循环对Cron进行补充。
简单来说,它会把任意频率的Cron修正到1分钟一次。
测试中使用监控宝15分钟一次和30分钟一次的监控都运行良好,执行时间记录显示执行频率接近标准的1分钟一次。
使用方法是把它改名xcron.php【其它也行啦,别和cron文件重名就好了】,和需要执行的cron.php放在一个目录下,然后把云监控的目标设置为xcron.php。
代码:

<?php
// 设定参数
$phpfile = 'cron.php';// 需要执行的Cron文件名
$time = 1;// 间隔分钟数
// 关闭浏览器仍然执行
set_time_limit(0);
ignore_user_abort(true);
// 读取记录
$A=$B=$C=$D= 0;
$F = off;
include('cronlog.php');
if (time() - $A &lt; 30)
exit;
// 判断是否有进程在执行
if ($F == on)
exit();
// 判断D是否为空
if ($D == 0){
$D = $C;
$C = $B;
$B = $A;
$A = time();
writelog($A,$B,$C,$D,$F);
include($phpfile);
exit();
}
// 启动修正
$D = $C;
$C = $B;
$B = $A;
$A = time();
$E = ($A-$D)/3;
writelog($A,$B,$C,$D,$F);
// 计算运行次数
$time *= 60;
$i=round($E/$time);
if ($i &lt;= 0){
include($phpfile);
exit();
}
if ($i &gt; 60){
$A=$B=$C=$D= 0;
$F = off;
writelog($A,$B,$C,$D,$F);
exit();
}
// 防止多进程运行
$F = on;
writelog($A,$B,$C,$D,$F);
// 循环
$u=1;
while($u&lt;=$i){
include($phpfile);
if ($A+$E-time()&lt;120){
$F = off;
writelog($A,$B,$C,$D,$F);
}
if ($A+$E-time()&lt;60)
exit();
sleep ($time);
$u++;

}
exit();
// 自定义函数
function writelog($A,$B,$C,$D,$F){
$file = '&lt;?php'.PHP_EOL.'$A = '.$A.';'.PHP_EOL.'$B = '.$B.';'.PHP_EOL.'$C = '.$C.';'.PHP_EOL.'$D = '.$D.';'.PHP_EOL.'$F = '.$F.';'.PHP_EOL.'?&gt;';
file_put_contents("cronlog.php",$file);
}
?>

评论

CC共享许可协议:BY-NC-SA 4.0 - 友情链接 - Theme by Qzhai