Files
xinhu/webmain/task/runt/runtAction.php
2023-04-05 13:00:20 +08:00

192 lines
4.8 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 计划任务用的程序
*/
class runtAction extends ActionNot
{
public $runid = 0;
public $queuelogid = 0;
public $runrs = array();
public $splitlast = 0; //距离上次提醒秒数0上次没有运行
public $todoarr = array();
public function initAction()
{
$this->display = false;
ob_start(); //打开缓冲区
$this->runid = (int)$this->getparams('runid','0');
$this->queuelogid = (int)$this->getparams('queuelogid','0');
$this->initTask($this->runid);
}
public function initTask($runid)
{
if($runid==0)return;
$this->runid = $runid;
$this->runrs = m('task')->getone($this->runid);
if($this->runrs && !isempt($this->runrs['lastdt'])){
$this->splitlast = time() - strtotime($this->runrs['lastdt']);
}
}
public function taskAfter()
{
//提醒的
$todoid = arrvalue($this->runrs,'todoid');
if(!isempt($todoid) && $this->todoarr){
$modenum = arrvalue($this->todoarr, 'modenum');
$agentname = arrvalue($this->todoarr, 'agentname');
$title = arrvalue($this->todoarr, 'title');
$cont = arrvalue($this->todoarr, 'cont');
if(!isempt($modenum)){
$flow = m('flow')->initflow($modenum);
$flow->push($todoid, $agentname, $cont, $title);
}else{
m('todo')->add($todoid, $title, $cont);
}
}
}
//判断模块是否存在开启
public function moderock($num)
{
$to = m('flow_set')->rows("`num`='$num' and `status`=1");
return ($to>0);
}
/**
* 运行完成后判断运行状态
*/
public function afterAction()
{
if($this->runid > 0){
$state = 2;
$cont = ob_get_contents();
if(contain($cont,'success'))$state=1;
m('task')->update(array(
'lastdt' => $this->rock->now,
'lastcont' => $cont,
'state' => $state
), $this->runid);
$this->taskAfter();
}
if($this->queuelogid > 0){
$cont = ob_get_contents();
m('log')->update(array('result' => $cont), $this->queuelogid);
}
}
/**
* 获取cli上参数格式-key=val
*/
public function getparams($key, $dev='')
{
if(PHP_SAPI != 'cli'){
return $this->get($key, $dev);
}
$arr = arrvalue($GLOBALS, 'argv');
$sss = '';
if($arr)for($i=2;$i<count($arr);$i++){
$str = $arr[$i];
if(!isempt($str)){
$stra = explode('=', $str);
if($stra[0]=='-'.$key.''){
$sss = arrvalue($stra, 1);
break;
}
}
}
if(isempt($sss))$sss = $dev;
return $sss;
}
}
class runtClassAction extends runtAction
{
public function runAction()
{
$mid = (int)$this->get('mid','0');
m('task')->baserun($mid);
echo 'success';
}
public function getlistAction()
{
$dt = $this->get('dt', $this->date);
$barr = m('task')->getlistrun($dt);
$this->option->setval('systaskrun', $this->now);
$this->returnjson($barr);
}
/**
* 运行定时任务用于cli模式的建每5分钟运行一次
* Linux 使用crontab php task.php runt,task
* win 使用计划任务 php task.php runt,task
* 也可以每5分钟访问地址http://127.0.0.1/app/xinhu/task.php?m=runt&a=task
*/
public function taskAction()
{
$runtime = $this->getparams('runtime',time());
$rtype = $this->getparams('rtype'); //运行类型
$dbs = m('task');
if($rtype=='queue')$dbs->sendstarttask();
$yunarr = $dbs->runjsonlist($runtime);
$oi = $cg = $sb = 0;
foreach($yunarr as $k=>$rs){
$urllu = $rs['urllu'];
$taskid = (int)$rs['id'];
$state = 2;
$cont = '';
$oi++;
if(substr($urllu,0,4)=='http'){
$cont = c('curl')->getcurl($urllu);
}else{
$urla = explode(',', $urllu);
$path = ''.ROOT_PATH.'/'.P.'/task/runt/'.$urla[0].'Action.php';
if(file_exists($path)){
$act = arrvalue($urla, 1,'run').'Action';
include_once($path);
$class= ''.$urla[0].'ClassAction';
$obj = new $class();
$obj->initTask($taskid);
$cont = $obj->$act();
$obj->taskAfter();
}else{
$cont = ''.$urla[0].'Action.php not found';
}
}
if(contain($cont,'success')){
$state = 1;
$cg++;
}else{
$sb++;
}
$dbs->update(array(
'lastdt' => $this->rock->now,
'lastcont' => $cont,
'state' => $state
), $taskid);
}
return 'runtask('.$oi.'),success('.$cg.'),fail('.$sb.')';
}
//新服务端加载计划任务
public function taskgetAction()
{
m('task')->sendstarttask();
return 'taskget.'.time().'';
}
/**
* 初始化计划任务linux
* php task.php runt,taskinit
*/
public function taskinitAction()
{
$str1 = 'cd '.ROOT_PATH.''.chr(10).'php '.ROOT_PATH.'/task.php runt,task';
$spath= ''.UPDIR.'/cli/xinhutaskrun.sh';
file_put_contents($spath, $str1);
if(function_exists('exec'))exec('chmod 777 '.$spath.'');
echo 'xinhu taskinit success';
}
}