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


79

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

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


9
Какой дистрибутив и версию вы используете? Управление сервисами (сервисы почти всегда называются «демонами» в мире Unix) раньше было простым и полустандартным. Вещи более разнообразны в эти дни. И не всегда приятно. :) Кроме того, что вы подразумеваете под контекстом ?
Алексиос

Хотя кажется, что systemd медленно побеждает в системной войне init. Debian - последнее большое препятствие, все еще использующее старый SysVinit, и в настоящее время он находится в процессе определения, какую систему инициализации использовать.
Патрик

1
В настоящее время я работаю с Debian (последняя стабильная версия), и под контекстом я подразумеваю переменные пути или заданный пользовательский контекст.
Erdinc Ay

1
Если вам нужно использовать только serverкоманду в Debian, см. Unix.stackexchange.com/q/226089/130402
Питер Краусс

Ответы:


124

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

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

 

SysVinit

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

Универсальный способ включения служб SysVinit при загрузке заключается в символической ссылке на них /etc/rc3.d(или /etc/rc2.d). Все услуги можно найти в /etc/init.d. Однако обратите внимание, что дистрибутивы часто имеют свой собственный инструмент для управления этими файлами, и этот инструмент следует использовать вместо этого. (Fedora / RedHat имеет serviceи chkconfig, Ubuntu имеет 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 вместо upstart, он станет де-факто выскочившей системой для большинства дистрибутивов (ubuntu уже объявила о том, что будет отказываться от upstart для systemd).

Список услуг:

systemctl list-unit-files

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

systemctl start {SERVICENAME}

Остановить сервис:

systemctl stop {SERVICENAME}

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

systemctl enable {SERVICENAME}

Отключить службу:

systemctl disable {SERVICENAME}

 

Выскочка

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

Upstart также кратко использовался 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, которая используется Gentoo. В настоящее время Gentoo является единственным дистрибутивом, который его использует, и он не рассматривается для использования и не поддерживается другими дистрибутивами. Так что я не рассматриваю его использование (хотя, если мнение таково, я могу добавить).


OpenRC - это своего рода абстракция для SysVinit. Это не заменяет это, это добавляет к этому.
Spidey

Отличная рецензия! Просто пара небольших исправлений: RHEL 6.x (и, следовательно, CentOS 6.x и остальные производные) использует upstart, как Ubuntu (хотя большинство сервисов все равно используют сценарии SysV в любом случае). Кроме того, я бы добавил, что «chkconfig» (RH) и «update-rc.d» (Debian) являются «официальными» способами добавления ссылок в каталоги rc? .D.
rsuarez

@rsuarez хорошая мысль о RHEL6. Хотя, кажется, не так уж много его использует. Большая часть системы по-прежнему работает через унаследованный SysVinit (17 выскочек, 89 SysVinit в одной из моих систем RHEL6). И так chkconfigи update-rc.dупоминаются. Смотрите второй абзац под SysVinit :-)
Патрик

@ Патрик согласен на № 1; «Ой!» на # 2 :-)
rsuarez

1
Спасибо за исчерпывающий ответ, теперь у меня есть общая картина. В настоящее время я использую Debian (последняя стабильная версия), здесь, в немецкоязычной Европе, он дает лучшие рекомендации, но, возможно, я попробую Redhat.
Erdinc Ay

9

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

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

Посмотрите, /etc/rc?.dчтобы увидеть, какие услуги уже присутствуют. Буква или цифра перед точкой - это уровень запуска; записи, имя которых начинается с S, выполняются с аргументом startпри входе в уровень выполнения, а записи, имя которых начинается с K, выполняются при выходе из уровня выполнения. Обычная последовательность уровней запуска: S во время загрузки (так /etc/rcS.d/S*выполняются), затем 2 (так /etc/rc2.d/S*выполняются). Во время выключения /etc/rc2.d/K*выполняются, затем уровень запуска переключается на 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чтобы создать символические ссылки для запуска и остановки вашего сервиса. Большинство сервисов работают на уровнях выполнения 2, 3, 4 и 5.

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


2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.