Cron修正程序

把任意频率的Cron修正到1分钟一次。
测试中使用监控宝15分钟一次和30分钟一次的监控都运行良好。

<?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 < 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 <= 0){
    include($phpfile);
    exit();
}
if ($i > 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<=$i){
    include($phpfile);
    if ($A+$E-time()<120){
        $F = off;
        writelog($A,$B,$C,$D,$F);
    }
    if ($A+$E-time()<60)
        exit();
    sleep ($time);
    $u++;
}
exit();
// 自定义函数
function writelog($A,$B,$C,$D,$F){
    $file = '<?php'.PHP_EOL.'$A = '.$A.';'.PHP_EOL.'$B = '.$B.';'.PHP_EOL.'$C = '.$C.';'.PHP_EOL.'$D = '.$D.';'.PHP_EOL.'$F = '.$F.';'.PHP_EOL.'?>';
    file_put_contents(“cronlog.php”,$file);
}
?>