public function __construct() { $this->onStart = function () { win32_set_service_status(ServiceStatusConstants::RUNNING); }; $this->onLoop = function () { switch (win32_get_last_control_message()) { case ServiceControlMessageConstants::PRESHUTDOWN: case ServiceControlMessageConstants::SHUTDOWN: case ServiceControlMessageConstants::STOP: win32_set_service_status(ServiceStatusConstants::STOP_PENDING); $this->stop(); break; case ServiceControlMessageConstants::INTERROGATE: win32_set_service_status(ServiceStatusConstants::RUNNING); break; /*case ServiceControlMessageConstants::PAUSE; win32_set_service_status (ServiceStatusConstants::PAUSE_PENDING); win32_set_service_status (ServiceStatusConstants::PAUSED); break; case ServiceControlMessageConstants::CONTINUE_SERVICE; win32_set_service_status (ServiceStatusConstants::CONTINUE_PENDING); win32_set_service_status (ServiceStatusConstants::RUNNING); break;*/ /*case ServiceControlMessageConstants::PAUSE; win32_set_service_status (ServiceStatusConstants::PAUSE_PENDING); win32_set_service_status (ServiceStatusConstants::PAUSED); break; case ServiceControlMessageConstants::CONTINUE_SERVICE; win32_set_service_status (ServiceStatusConstants::CONTINUE_PENDING); win32_set_service_status (ServiceStatusConstants::RUNNING); break;*/ default: win32_set_service_status(ServiceStatusConstants::NOT_IMPLEMENTED); } }; $this->onStop = function () { win32_set_service_status(ServiceStatusConstants::STOPPED); }; register_shutdown_function($this->onStop); parent::__construct(); }
public function run() { //TRUE on success; FALSE on parameter problem; Win32 Error Code on error $code = win32_start_service_ctrl_dispatcher($this->serviceName); if (!$code) { throw new \Exception("Error running service: " . $this->serviceDisplayName . ". Was the service started?"); } if ($code !== TRUE && php_sapi_name() !== 'cli') { $codeName = array_search($code, get_defined_constants(true)['win32service']); throw new \Exception("Error running service: " . $this->serviceDisplayName . " with code: " . $codeName); } win32_set_service_status(WIN32_SERVICE_START_PENDING); error_log("Service " . $this->serviceDisplayName . " setting up run..."); $this->setupRun(); win32_set_service_status(WIN32_SERVICE_RUNNING); error_log("Service " . $this->serviceDisplayName . " running..."); while (WIN32_SERVICE_CONTROL_STOP !== win32_get_last_control_message()) { $this->msgs[] = win32_get_last_control_message(); $this->work(); } }
case 'run': win32_start_service_ctrl_dispatcher($serviceName); win32_set_service_status(WIN32_SERVICE_RUNNING); break; case 'debug': set_time_limit(10); break; default: KalturaLog::info('Unkown action'); exit(-1); } $kscheduler = new KGenericScheduler($phpPath, $iniDir); while (1) { //Handle Windows Service Request if ($serviceAction == 'run') { switch (win32_get_last_control_message()) { case WIN32_SERVICE_CONTROL_CONTINUE: break; case WIN32_SERVICE_CONTROL_INTERROGATE: win32_set_service_status(WIN32_NO_ERROR); break; case WIN32_SERVICE_CONTROL_STOP: KalturaLog::info('Service stopped gracefully'); if (file_exists($pid)) { unlink($pid); } win32_set_service_status(WIN32_SERVICE_STOPPED); exit(0); default: win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED); }