26 return $this->classNameAlias[$class_name] ?? $class_name;
38 public function schedule($class_name,$config =
null,$time =
null,$interval =
null,$max_time =
null){
46 public function delete($id){
60 protected function create($class_name,$id,$config =
null,$time =
null,$interval =
null,$max_time =
null){
61 return new $class_name($this,$id,$config,$time,$interval,$max_time);
69 public function instant($class_name,$config =
null,$timer_id =
null){
70 $this->
create($class_name,
null,$config)->execute($timer_id);
77 protected function next($id =
null){
85 protected function lock($job){
110 $this->
delete($job->id);
126 return !$job->groupId || !$job->groupMaxCount || ($this->
groupCount($job->groupId) < $job->groupMaxCount);
145 if($this->parallelCommand && !$id){
147 while(time() - $start <= $this->minTime){
148 if(($job = $this->
next()) && (($done[$job->id] ?? -1) != $job->time) && $this->checkGroup($job)){
149 $command = strtr($this->parallelCommand,[
'*' => $job->id,
'$' => escapeshellarg(PHP_BINARY)]);
150 $log->info(
"Executing job '{$job->id}' in parallel",__FILE__,__LINE__,compact(
'command'));
151 \Rsi::executeParallel($command);
152 if((++$count >= $this->maxJobs) || (time() - $start >= $this->maxTime))
break;
153 $done[$job->id] = $job->time;
155 else usleep($this->sleepTime * 1000000);
161 $timer_id = $this->logTimerPrio ? $log->start($this->logTimerPrio,
"Executing job '{$job->id}'",__FILE__,__LINE__) :
null;
162 $job->execute($timer_id);
163 if($timer_id) $log->stop($timer_id);
165 $diff = ($time = $job->nextTime) - time();
166 if(!$time) $log->alert(
"Invalid interval for job '{$job->id}'",__FILE__,__LINE__);
167 elseif($diff < 0) $log->warning(
"Job '{$job->id}' rescheduled in past",[
'diff' => $diff]);
170 else $this->
ready($job);
172 if((++$count >= $this->maxJobs) || (time() - $start >= $this->maxTime))
break;
177 usleep($this->sleepTime * 1000000);
179 while(!$id && (time() - $start <= $this->minTime));
180 foreach($this->
overdue() as $job) $log->critical(
"Job '{$job->id}' is overdue",[
'time' => $job->time,
'interval' => $job->interval]);