Esempio n. 1
0
 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();
 }
Esempio n. 2
0
 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();
     }
 }
Esempio n. 3
0
 public function run()
 {
     win32_set_service_status(ServiceStatusConstants::START_PENDING);
     $this->loop->run();
 }
Esempio n. 4
0
        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);
        }
    }
    $kscheduler->loop();
}
//Exit
if ($serviceAction == 'run') {
    win32_set_service_status(WIN32_SERVICE_STOPPED);
}
exit(0);
Esempio n. 5
0
<?php

namespace Albus\Win32Service;

use Albus\CMD\SC;
use Albus\Win32Service\Win32Constants\ServiceStatusConstants;
switch (PHP_SAPI) {
    case !'cli':
        break;
    default:
        Settings::getCLIparams();
        win32_start_service_ctrl_dispatcher(Settings::$service);
        register_shutdown_function(function () {
            win32_set_service_status(ServiceStatusConstants::STOPPED);
        });
        SC::$onFailtureRun = 5000;
        SC::$onFailtureRestart = 3000;
        SC::$msFailterCountReset = 5000;
        echo 'Start action: ' . Settings::$action . PHP_EOL;
        Settings::$params = urldecode(http_build_query(['-f' => escapeshellarg(Settings::$ScriptPathName), '-- --action' => escapeshellarg('run'), '--service' => escapeshellarg(Settings::$service)], null, ' '));
        call_user_method(Settings::$action, new Deamon());
        register_shutdown_function(function () {
            echo 'Stop action: ' . Settings::$action . PHP_EOL;
        });
}