# Управление службами

Примечание

С помощью данного SDK API можно управлять только службами Linux.

Plesk предоставляет основную функциональность для управления службами. Это SDK API позволяет расширениям регистрировать собственные службы, делая их прозрачными для конечных пользователей.

Службы в SDK вводятся с помощью абстрактного класса pm_SystemService_Service. Каждая зарегистрированная служба должна быть получена из него и содержать метод getName(), определяющий отображаемое имя службы. Метод getId() определяет идентификатор службы. Он может быть получен из имени класса службы путем удаления префикса & имени модуля (например, Modules_TrafficMonitor_Monitor_Service => monitor_service, PleskExtTrafficMonitorMonitorService => monitorservice, MonitorService => monitorservice). Вы можете переопределять его так, как требуется.

Управление службой осуществляется с помощью методов onStart(), onStop() и onRestart(). Состояние службы может быть получено с помощью методов isInstalled(), isConfigured() и isRunning(), которые по умолчанию возвращают значение «true».

Каждая служба должна быть зарегистрирована в хуке. Класс Modules_<Extension name>_SystemServices должен быть получен из pm_Hook_SystemServices и помещен в папку `plib/hooks/`.

Чтобы управлять службами через API-RPC или CLI, используйте расширенный идентификатор службы: `ext-<extension id>-<service id>`. Например, в случае Modules_TrafficMonitor_Service это будет `ext-traffic-monitor-service`.

## Примеры

Пример реализации службы (`PRODUCT_ROOT_D . /admin/plib/modules/traffic-monitor/library/Service.php`):

    <?php
    // Copyright 1999-2016. Parallels IP Holdings GmbH. All Rights Reserved.
    /**
     * Service provided by module
     *
     * @package Plesk_Modules
     */
    class Modules_TrafficMonitor_Service extends pm_SystemService_Service
    {
        public function getName()
        {
            return 'Traffic monitor';
        }

        public function onStart()
        {
            Modules_TrafficMonitor_Agent::enableMonitor();
        }

        public function onStop()
        {
            Modules_TrafficMonitor_Agent::execute(['-stop']);
        }

        public function onRestart()
        {
            Modules_TrafficMonitor_Agent::execute(['-reset']);
        }

        public function isRunning()
        {
            return Modules_TrafficMonitor_Agent::isMonitorEnabled();
        }

    }

Пример регистрации службы (`PRODUCT_ROOT_D . /admin/plib/modules/traffic-monitor/hooks/SystemServices.php`):

    class Modules_TrafficMonitor_SystemServices extends pm_Hook_SystemServices
    {
        public function getServices()
        {
            return [new Modules_TrafficMonitor_Service()];
        }
    }