Bug 6139

Summary: Написать модуль для управления сервисами
Product: [Свободные проекты (Open source projects)] Tartarus Reporter: Devaev Maxim <mdevaev>
Component: SettingsdAssignee: Devaev Maxim <mdevaev>
Status: CLOSED FIXED QA Contact: Vitaly Lipatov <lav>
Severity: minor    
Priority: P4 CC: lav, pav, sin
Version: не указана   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 5903    

Description Devaev Maxim 2010-10-06 21:44:27 MSD
Нужна реализация dbus-ного api для service и chkconfig.
Comment 1 Devaev Maxim 2010-10-08 21:54:25 MSD
Реализовал прототип управления сервисами. В специальном пространстве имен располагаются дбасные объекты, которые имееют методы on(), off(), start(), stop() и status(). on() и off() имеют аргумент, который позволяют включить сервис на конкретном ранлевеле.
Comment 2 Devaev Maxim 2010-10-11 21:12:47 MSD
Написал модуль. Предоставляется дерево объектов, каждый из которых является сервисом с определенным набором методов, например:
-----------------------------
/org/etersoft/settingsd/functions/services/NetworkManager
/org/etersoft/settingsd/functions/services/acpid
/org/etersoft/settingsd/functions/services/atd
/org/etersoft/settingsd/functions/services/auditd
......
/org/etersoft/settingsd/functions/services/sshd
/org/etersoft/settingsd/functions/services/sysstat
/org/etersoft/settingsd/functions/services/udev_post
/org/etersoft/settingsd/functions/services/vboxdrv
/org/etersoft/settingsd/functions/services/vboxweb_service
/org/etersoft/settingsd/functions/services/vnstat
/org/etersoft/settingsd/functions/services/winbind
/org/etersoft/settingsd/functions/services/wpa_supplicant
/org/etersoft/settingsd/functions/services/xfs
/org/etersoft/settingsd/functions/services/ypbind
/org/etersoft/settingsd/functions/services/zvbid
-----------------------------

Каждый объект имеет такой набор методов, для /org/etersoft/settingsd/functions/services/sshd:
-----------------------------
method QString org.freedesktop.DBus.Introspectable.Introspect()
method QString org.etersoft.settingsd.functions.service.description()
method QString org.etersoft.settingsd.functions.service.levelsMap()
method int org.etersoft.settingsd.functions.service.off(QString levels)
method int org.etersoft.settingsd.functions.service.on(QString levels)
method QString org.etersoft.settingsd.functions.service.shortDescription()
method int org.etersoft.settingsd.functions.service.start()
method int org.etersoft.settingsd.functions.service.status()
method int org.etersoft.settingsd.functions.service.stop()
-----------------------------

start(), stop() и status() используются для запуска сервиса, останова и получения статуса соответственно. Возвращаемым значением является код завершения команды /etc/init.d/<servicename> <command>.

on() и off() позволяют включать и выключать сервис либо с параметрами по умолчанию, либо, если указано, на конкретных ранлевелах.

levelsMap() возвращает строку из семи символов, каждый из которых является 1 или 0 и обозначает состояние сервиса для конкретного ранлевела. Например, для sshd levelsMap() у меня на ноуте возвращает 0011110, что означает, что сервис будет запускаться на уровнях 2345 (по индексу позиции в строке).
Методы description() и shortDescription() нужны для получения описания сервиса по стандарту LSB. Сейчас парсеры для них не реализованы, поэтому возвращаемым значением является пустая строка. Помечены как TODO. Пока что, для коробочки, они не нужны.