Как делают сервисы в работе Debian, и как я могу управлять ими?

В Windows I имеют менеджера служб, где я вижу все системные службы, которые могут быть запущены через сам Windows, я настроил пользователя, которого он использует, управление правами там, и я могу передать переменные и некоторую другую информацию в службы, я могу назвать их, и я могу создать сервисы дубликатов одной программы и так далее. Таким образом, у меня есть основной инструмент управления в Windows.

Как я могу сделать то же в Linux? Как я могу инициировать для выполнения "svnserve" при запуске, или как я могу настроить сервисы для выполнения в специальном контексте. Как я могу просмотреть все "запрограммированные" сервисы?

80
27.12.2013, 01:26
3 ответа

В настоящее время существует 3 основных init системы, используемые Linux. Несколько лет назад, был всего один, SysVinit. Но SysVinit серьезно недоставало возможностей, таких как сервисное построение графика зависимости, таким образом, он был удержан от использования в большинстве дистрибутивов к настоящему времени. В настоящее время большинство дистрибутивов переключается на systemd. Хотя существует также выскочка.

Но вот ответ на Ваш вопрос для каждой из 3 init систем:

 

SysVinit

SysVinit в настоящее время используется Debian и Redhat. Хотя следующая версия Redhat (7) будет использовать systemd.

univeral способ включить услуги SysVinit на начальную загрузку является к символьной ссылке ими в /etc/rc3.d (или /etc/rc2.d). Все сервисы могут быть найдены в /etc/init.d. Обратите внимание однако, что дистрибутивы будут часто иметь свой собственный инструмент для управления этими файлами, и что инструмент должен использоваться вместо этого. (Fedora/RedHat имеет service и chkconfig, человечность имеет update-rc.d)

Сервисы списка:

ls /etc/init.d/

Запустите сервис:

/etc/init.d/{SERVICENAME} start

или

service {SERVICENAME} start

Сервис остановки:

/etc/init.d/{SERVICENAME} stop

или

service {SERVICENAME} stop

Включите сервис:

cd /etc/rc3.d
ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}

( S95 используется для определения порядка. S01 запустится перед S02, и т.д.),

Отключите сервис:

rm /etc/rc3.d/*{SERVICENAME}

 

Systemd

Самое известное распределение с помощью systemd является Fedora. Хотя это используется многими другими. Кроме того, с Debian, принимавшим решение пойти с systemd по выскочке, это станет defacto новомодной системой для большинства дистрибутивов (человечность уже объявила, что они будут отбрасывать выскочку для systemd).

Сервисы списка:

systemctl list-unit-files

Запустите сервис:

systemctl start {SERVICENAME}

Сервис остановки:

systemctl stop {SERVICENAME}

Включите сервис:

systemctl enable {SERVICENAME}

Отключите сервис:

systemctl disable {SERVICENAME}

 

Выскочка

Выскочка была разработана людьми Ubuntu. Но после того, как debian решил пойти с systemd, Ubuntu объявила, что они отбросят выскочку.

Выскочка также кратко использовалась Redhat, поскольку он присутствует в RHEL-6, но это не является наиболее часто используемым.

Сервисы списка:

initctl list

Запустите сервис:

initctl start {SERVICENAME}

Сервис остановки:

initctl stop {SERVICENAME}

Включите сервис:

2 пути, к сожалению:

  1. Будет файл /etc/default/{SERVICENAME} который содержит строку ENABLED=.... Измените эту строку на ENABLED=1.

  2. Будет файл /etc/init/{SERVICENAME}.override. Удостоверьтесь, что это содержит start (или отсутствует полностью), нет manual.

Отключите сервис:

echo manual > /etc/init/{SERVICENAME}.override

Примечание: Существует также система 'OpenRC' init, которая используется хинду. В настоящее время хинду является единственным дистрибутивом, который использует его, и это не рассматривает для использования, ни поддерживает любой другой дистрибутив. Таким образом, я не покрываю, это - использование (хотя, если мнение - то, что я делаю, я могу добавить его).

125
27.01.2020, 19:30
  • 1
    OpenRC является видом абстракции для SysVinit. Это не заменяет его, это добавляет к нему. –  Spidey 26.12.2013, 17:55
  • 2
    Большая рецензия! Просто пара незначительных исправлений: RHEL 6.x (и таким образом, CentOS 6.x и остальная часть производных) использует выскочку, как Ubuntu (хотя большинство сервисов все еще использует сценарии SysV так или иначе). Кроме того, я добавил бы, что "chkconfig" (RH) и "обновление-rc.d" (Debian) являются "официальными" способами добавить ссылки к дистанционному управлению? каталоги.d. положительная сторона –  rsuarez 26.12.2013, 19:10
  • 3
    @rsuarez на вещи RHEL6. Хотя не много, кажется, использует его. Большая часть системы все еще работает через SysVinit прежней версии (17 выскочек, 89 SysVinit в одной из моих систем RHEL6). И chkconfig и update-rc.d упоминаются. См., что второй абзац под SysVinit :-) –  Patrick 26.12.2013, 19:28
  • 4
    @Patrick договаривается о № 1; "ой!" на № 2 :-) –  rsuarez 26.12.2013, 20:00
  • 5
    Спасибо за всесторонний ответ теперь у меня есть большое изображение. В настоящее время я использую Debian (последняя конюшня), здесь в немецкоязычной Европе, это имеет лучшие рекомендации, но возможно я дам Redhat попытку. –  Erdinc Ay 27.12.2013, 01:32

Различные дистрибутивы используют различные механизмы для управления сервисами. Программное обеспечение для управления сервисами называют init после традиционного названия самого первого процесса (с идентификатором 1 процесса), который отвечает за запуск других.

Debian использует традиционный вариант SysVinit init. Под этой системой существует набор сценариев в каталоге /etc/init (это и другое местоположение могут варьироваться немного между дистрибутивами то использование SysVinit). Эти сценарии не вызываются непосредственно, но через символьные ссылки в каталогах /etc/rc?.d. Это - присутствие и название этих символьных ссылок, которые определяют, когда сервисы запускаются. Для получения дополнительной информации прочитайте главу по init в Ссылке Debian.

Взгляните в /etc/rc?.d видеть, какие сервисы уже присутствуют. Буква или цифра перед точкой являются runlevel; записи, имя которых запускается с S выполняются с аргументом start при вводе runlevel и записей, имя которых запускается с K выполняются при отъезде runlevel. Нормальная последовательность runlevel: S во время начальной загрузки (так /etc/rcS.d/S* выполняются), затем 2 (так /etc/rc2.d/S* выполняются). Во время завершения работы, /etc/rc2.d/K* выполняются, затем runlevel переключается на 0 (или 6 для перезагрузки).

Короче говоря если Вы хотите создать сценарий запуска для нового сервиса:

  • Запишите сценарий оболочки в /etc/init.d. Этот сценарий должен принять один аргумент, который может быть start, stop, force-reload, restart, или (дополнительно) reload или status.Разница между reload и restart это restart эквивалентно stop сопровождаемый start в то время как reload перезагружает конфигурацию, ничего не останавливая (если сервис поддерживает ее); force-reload делает reload при наличии и restart иначе. Посмотрите существующие файлы и скрипты Создания, запущенные во время начальной загрузки с Debian для примеров.
  • Выполненный update-rc.d создать символьные ссылки, чтобы запустить и остановить Ваш сервис. Большинство сервисов выполняется в runlevels 2, 3, 4 и 5.

Обратите внимание, что для обеспечения svn доступа может быть легче настроить Apache и использовать протокол HTTPS или HTTP. Это имеет дополнительную льготу разрешения быстрого репозитория, просматривающего веб-браузер.

9
27.01.2020, 19:30

Традиционного происхождения Unix нет ничего специального о сервисах. Услуги являются просто процессом, но за двумя исключениями: им не нужен терминал, и они начинают при начальной загрузке. то, как они начинают при начальной загрузке, зависит от init (который мог быть sysv init, bsd init, выскочкой, systemd или чем-то еще; проверьте свою страницу справочника на init), и используют ли Ваш обертку для задачи или для init конфигурации. Нет ничего мешающего Вам выполнить сервис от терминала, на самом деле это распространено для тестирования.

2
27.01.2020, 19:30

Теги

Похожие вопросы