//Signal handler callback function $sigHandler = function ($signo = null) use(&$interrupt, $oPid, $logger) { static $once = 0; $interrupt++; if ($once++) { return; } //Reporting about termination $logger->log("SERVICE", "Service recieved termination SIGNAL:%d", intval($signo)); //We should stop all running tasks. //It's enough to terminate all running clients. Launcher::terminateClients(); //Without this workers may not be terminated sleep(1); //Terminating an MDP broker, not sure we have to do so. Launcher::terminateBroker(); //Removing pid file $oPid->remove(); }; pcntl_signal(SIGINT, $sigHandler); pcntl_signal(SIGTERM, $sigHandler); pcntl_signal(SIGHUP, $sigHandler); register_shutdown_function($sigHandler); $previous = new DateTime('-5 minutes'); $logger->log("SERVICE", "Starting service"); while (!$interrupt) { // System tymezone is considered to be used here $startTime = new DateTime('now'); //We run every minute if ($startTime->format('i') == $previous->format('i')) { //Sleep interval, first sleep will be long