Эта страница была перенесена на
altlinux.org. Текст на freesource.info заморожен.
устройство модуля alterator-services
Управляение следующими параметрами:
- текущее состояние сервиса: включен, выключен, неизвестно, включить/выключить (/sbin/service <service> start/stop/status)
- включение сервиса при запуске: показать состояние, включить/выключить (chkconfig <service> on/off)
С отдельными runlevel'ами решили не работать.
Проблемы:
- Как искать сервисы? В /etc/rc.d/init.d иногда лежит всякая фигня (например /etc/rc.d/init.d/halt), для которой даже пытаться узнать статус не слишком полезно... Так что тупой поиск по директории плох. Строить список сервисов с помощью /sbin/chkconfig – -list тоже не слишком правильно, так как мы теряем сервисы, которые были удалены из chkconfig'a
Решение: мы работаем только с сервисами, которые можно добавить в chkconfig. Просматриваем директорию /etc/rc.d/init.d, для каждого сервиса проверяем, есть ли он в chkconfig. Если нет – пытаемся добавить и смотрим, что получилось. Если сервис добавился – выключаем его (чтоб состояние не изменилось) и добавляем в список.
- Для каких runlevel'ов включать сервисы? Тут варианты такие:
- включать только для текущего уровня. Минус такой – если пользователь не пользуется разными уровнями – то этот вариант ничем не лучше остальных, если пользуется – он сможет запутать систему очень странным образом, так что запутанность не будет показываться этим модулем.
- включать для тех уровней, которые указаны в заголовке скрипта (делать chkconfig -reset). На первый взгляд решение кажется самым правильным (то, что например, dm хочет вставать в 5, но не в 3 уровень – это его личное дело, которое пропивано в его заголовке), однако для многих скриптов в заголовке стоит прочерк (вроде как «вообще не запускать» сервис) – такие скрипты вообще не смогут быть запущены.
- включать для некоторого известного набора уровней (например 2345, как делается по умолчанию в chkconfig, если уровни не указывать). Кажется, самый хороший вариант. Правда при этом вообще теряется различие между разными runlevel'ами, но, кажется, это небольшое зло. Кстати, при этом запутается смысл в переключении runlevel'а 3/5 в alterator-X11. Там лучше либо непосредственно управлять chkconfig dm on/off, либо вообще не управлять этим...
Решение: chkconfig <service> on/off
Всякие мелочи:
- Состояние «включать при запуске» показывается по текущему runlevel'у.
- для определения текущего состояния: запустить /sbin/service <service>, разобрать полученную строчку вида «Usage: aaa {start|stop|status|reload}", если можно, получть status, привести его к виду «running/stopped/unknown»
- из строчки usage также можно понимать, поддерживает ли сервис команды start/stop (параметр switchable)
Интерфейс бакэнда
list -> ((«services/xinetd» name “xinetd” status “running”)...) — статус пока не выдается, т.к. очень медленно, а использовать удобно только в qt...
list для не-корневого объекта-> список действий типа “start” “stop” “restart” c label-переводами, в соответствии с текущим состоянием.
read -> («services/xinetd» name “xinetd” status “running” switchable #t chkconfig_status #t description “text”)
write <– name, change_status («start» / “stop”), chkconfig_status (#t/#f)