exit; } $taskClass = 'Scalr\\System\\Zmq\\Cron\\Task\\' . $cls; /* @var $task \Scalr\System\Zmq\Cron\AbstractTask */ $task = new $taskClass(); $config = $task->config(); //Initializes MDP Worker $worker = (new Worker(Scalr::config('scalr.crontab.sockets.broker'), $service, true))->setHeartbeat(Scalr::config('scalr.crontab.heartbeat.delay'))->setLiveness(Scalr::config('scalr.crontab.heartbeat.liveness'))->setLogger(\Scalr::getContainer()->logger('cron/worker.php')->setLevel(\Scalr::config('scalr.crontab.log_level')))->connect(); $interrupt = 0; // Whether the worker lost connection to the broker. $disconnected = false; //Signal handler callback function $sigHandler = function ($signo = null) use(&$interrupt, $task, $worker, $disconnected) { static $once = 0; //Releases emergency memory trying to handle memory limit fatal error Scalr::$emergencyMemory = null; $interrupt++; if ($once++) { return; } if ($disconnected) { $task->log("DEBUG", "Worker was disconnected. Exiting"); } else { $task->log("DEBUG", "Worker received termination SIGNAL:%d", intval($signo)); } //Prevents zombifying if (!$disconnected && $task->isServiceRegistered() !== false) { //Disconnect worker //NOTE! If broker is offline at this moment, the process is hanging while worker is sending the message $worker->send(Mdp::WORKER_DISCONNECT); $task->log('DEBUG', 'Worker sent a disconnect message.');