Как работают сервисы в 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. Ничто не мешает вам запускать службу из терминала, на самом деле это обычное явление для целей тестирования.

hildred
источник