mirror of
https://e.coding.net/circlecloud/MinecraftAccount.git
synced 2025-11-26 21:46:09 +00:00
66
ThinkPHP/Library/Behavior/CronRunBehavior.class.php
Normal file
66
ThinkPHP/Library/Behavior/CronRunBehavior.class.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: liu21st <liu21st@gmail.com>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Behavior;
|
||||
/**
|
||||
* 自动执行任务
|
||||
*/
|
||||
class CronRunBehavior {
|
||||
|
||||
public function run(&$params) {
|
||||
// 锁定自动执行
|
||||
$lockfile = RUNTIME_PATH.'cron.lock';
|
||||
if(is_writable($lockfile) && filemtime($lockfile) > $_SERVER['REQUEST_TIME'] - C('CRON_MAX_TIME',null,60)) {
|
||||
return ;
|
||||
} else {
|
||||
touch($lockfile);
|
||||
}
|
||||
set_time_limit(1000);
|
||||
ignore_user_abort(true);
|
||||
|
||||
// 载入cron配置文件
|
||||
// 格式 return array(
|
||||
// 'cronname'=>array('filename',intervals,nextruntime),...
|
||||
// );
|
||||
if(is_file(RUNTIME_PATH.'~crons.php')) {
|
||||
$crons = include RUNTIME_PATH.'~crons.php';
|
||||
}elseif(is_file(COMMON_PATH.'Conf/crons.php')){
|
||||
$crons = include COMMON_PATH.'Conf/crons.php';
|
||||
}
|
||||
if(isset($crons) && is_array($crons)) {
|
||||
$update = false;
|
||||
$log = array();
|
||||
foreach ($crons as $key=>$cron){
|
||||
if(empty($cron[2]) || $_SERVER['REQUEST_TIME']>=$cron[2]) {
|
||||
// 到达时间 执行cron文件
|
||||
G('cronStart');
|
||||
include COMMON_PATH.'Cron/'.$cron[0].'.php';
|
||||
G('cronEnd');
|
||||
$_useTime = G('cronStart','cronEnd', 6);
|
||||
// 更新cron记录
|
||||
$cron[2] = $_SERVER['REQUEST_TIME']+$cron[1];
|
||||
$crons[$key] = $cron;
|
||||
$log[] = "Cron:$key Runat ".date('Y-m-d H:i:s')." Use $_useTime s\n";
|
||||
$update = true;
|
||||
}
|
||||
}
|
||||
if($update) {
|
||||
// 记录Cron执行日志
|
||||
\Think\Log::write(implode('',$log));
|
||||
// 更新cron文件
|
||||
$content = "<?php\nreturn ".var_export($crons,true).";\n?>";
|
||||
file_put_contents(RUNTIME_PATH.'~crons.php',$content);
|
||||
}
|
||||
}
|
||||
// 解除锁定
|
||||
unlink($lockfile);
|
||||
return ;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user