Ejemplo n.º 1
0
    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.');