Як працюють сервіси в Debian і як я можу ними керувати?


79

У Windows у мене є менеджер сервісів, де я бачу всі системні служби, які можна запустити через саму Windows, я налаштував користувача, якого він використовує, управління правами є, і я можу передавати змінні та деяку іншу інформацію службам , Я можу їх назвати, і я можу створювати послуги дублікатів однієї програми тощо. Тож у мене є основний інструмент управління в Windows.

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


9
Який дистрибутив та версію ви використовуєте? Управління сервісом (послуги майже завжди називають "демонами" у світі Unix), як правило, було простим і напівстандартним. У наші дні справи різноманітніші. І не завжди приємно. :) Також, що ви маєте на увазі під контекстом ?
Олексій

Хоча здається, що Сидд повільно перемагає у війні за систему. Debian - це останній великий талант, який все ще використовує старий SysVinit, і на даний момент визначає, з якою системою init потрібно звернутися.
Патрік

1
В даний час я працюю з Debian (остання стабільна), і під контекстом я маю на увазі змінні шляху або вказаний користувальницький контекст.
Ердінц Ай

1
Якщо вам потрібно використовувати лише serverкоманду на Debian, дивіться unix.stackexchange.com/q/226089/130402
Пітер Краус

Відповіді:


124

В даний час є три основні системи init, які використовує Linux. Кілька років тому був лише один, SysVinit. Але SysVinit серйозно бракував таких можливостей, як графік залежності від сервісу, тому до цих пір він застарілий у більшості дистрибутивів. В даний час більшість дистрибутивів переходять на systemd . Хоча є і вискочка .

Але ось відповідь на ваше запитання щодо кожної з 3-х систем init:

 

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 - це Fedora. Хоча його використовують і багато інших. Крім того, коли Debian вирішив перейти з systemd через upstart, він стане системою defacto upstart для більшості дистрибутивів (ubuntu вже оголосив, що відкине старт для 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" init, яку використовує Gentoo. В даний час Gentoo є єдиним дистрибутивом, який використовує його, і він не розглядається для використання, а також не підтримується будь-яким іншим дистрибутивом. Тому я не висвітлюю його використання (хоча якщо думка така, що я роблю, я можу додати її).


OpenRC є свого роду абстракцією для SysVinit. Це не замінює, а додає до нього.
Spidey

Чудова запис! Всього декілька незначних виправлень: RHEL 6.x (і, таким чином, CentOS 6.x та решта похідних) використовує оперативні запуски, як і Ubuntu (хоча більшість сервісів все одно використовують сценарії SysV). Також я додам, що "chkconfig" (RH) та "update-rc.d" (Debian) - це "офіційні" способи додавання посилань до каталогів rc? .D.
rsuarez

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

@Patrick домовляються про №1; "ой!" в №2 :-)
rsuarez

1
Дякую за вичерпну відповідь, тепер я отримав велику картину. Наразі я використовую Debian (остання стабільна), тут, у німецькомовній Європі, є найкращі рекомендації, але, можливо, я спробую Redhat спробувати.
Ердінц Ай

9

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

Debian використовує традиційний варіант init SysVinit . У цій системі в каталозі є колекція скриптів /etc/init(це та інше місце може дещо відрізнятися між дистрибутивами, які використовують SysVinit). Ці скрипти не викликаються безпосередньо, а через символічні посилання в каталогах /etc/rc?.d. Саме наявність та назва цих символічних посилань визначають, коли запускаються послуги. Детальніше читайте розділ про init у довідці про 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.