$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();