$oPid = new PidFile(CACHEPATH . '/cron.client.' . $task->getName() . '.pid', '/client.php');
$oPid->setLogger($logger);
$oPid->create();
$interrupt = 0;
//Signal handler callback function
$sigHandler = function ($signo = null) use(&$interrupt, $oPid, $task, $taskConfig) {
static $once = 0;
$interrupt++;
if ($once++) {
return;
}
$task->log($taskConfig->daemon ? 'SERVICE' : 'DEBUG', "Client recieved termination SIGNAL:%d", intval($signo));
//Terminating child processes (workers)
$task->shutdown();
//Removing pid file
$oPid->remove();
//No use to proceed
exit;
};
pcntl_signal(SIGINT, $sigHandler);
pcntl_signal(SIGTERM, $sigHandler);
pcntl_signal(SIGHUP, $sigHandler);
register_shutdown_function($sigHandler);
if ($taskConfig->daemon) {
$task->log('SERVICE', 'Starting %s...', $task->getName());
}
$scalrService = $task->getScalrService();
while (!$interrupt) {
$scalrService->update(['state' => ScalrService::STATE_RUNNING, 'lastStart' => new DateTime(), 'lastFinish' => null, 'numTasks' => 0, 'numWorkers' => 1]);
try {
$task->run();