Jak działają usługi w Debianie i jak mogę nimi zarządzać?

79

W systemie Windows mam menedżera usług, w którym widzę wszystkie usługi systemowe, które można uruchomić przez sam system Windows, konfiguruję używanego przez niego użytkownika, zarządzanie prawami, i mogę przekazywać zmienne i inne informacje do usług , Mogę je nazwać i mogę tworzyć duplikaty usług jednego programu i tak dalej. Mam więc główne narzędzie do zarządzania w systemie Windows.

Jak mogę zrobić to samo w systemie Linux? W jaki sposób mogę uruchomić, aby uruchomić „svnserve” podczas uruchamiania lub jak skonfigurować usługi do działania w specjalnym kontekście. Jak mogę wyświetlić wszystkie „zaprogramowane” usługi?

Erdinc Ay
źródło
9
Jakiej dystrybucji i wersji używasz? Zarządzanie usługami (usługi w świecie uniksowym prawie zawsze nazywane są „demonami”) były kiedyś łatwe i pół-standardowe. Obecnie rzeczy są bardziej zróżnicowane. I nie zawsze miło. :) Co również rozumiesz przez kontekst ?
Alexios,
Chociaż wydaje się, że systemd powoli wygrywa wojnę z systemem init. Debian jest ostatnią dużą przeszkodą, która wciąż korzysta ze starego SysVinit i obecnie jest w trakcie określania, z którym systemem inicjującym się wybrać.
Patrick
1
Obecnie pracuję z Debianem (najnowsza stabilna), a przez kontekst rozumiem zmienne ścieżki lub określony kontekst użytkownika.
Erdinc Ay
1
Jeśli potrzebujesz tylko użyć serverpolecenia w Debianie, zobacz unix.stackexchange.com/q/226089/130402
Peter Krauss

Odpowiedzi:

124

Obecnie istnieją 3 główne systemy inicjujące używane przez Linuksa. Kilka lat temu był tylko jeden, SysVinit. Ale SysVinit poważnie brakowało takich możliwości, jak wykres zależności zależności od usług, więc do tej pory był on przestarzały w większości dystrybucji. Obecnie większość dystrybucji przechodzi na systemd . Chociaż jest też dobry początek .

Ale oto odpowiedź na twoje pytanie dla każdego z 3 systemów inicjujących:

 

SysVinit

SysVinit jest obecnie używany przez Debian i RedHat. Chociaż następna wersja RedHat (7) będzie używać systemd.

Uniwersalny sposób włączania usług SysVinit podczas rozruchu polega na ich dowiązaniu symbolicznym w /etc/rc3.d(lub /etc/rc2.d). Wszystkie usługi można znaleźć w /etc/init.d. Należy jednak pamiętać, że dystrybucje często mają własne narzędzie do zarządzania tymi plikami, a zamiast tego należy użyć tego narzędzia. (Fedora / RedHat ma servicei chkconfigUbuntu ma update-rc.d)

Lista usług:

ls /etc/init.d/

Uruchomić usługę:

/etc/init.d/{SERVICENAME} start

lub

service {SERVICENAME} start

Zatrzymaj usługę:

/etc/init.d/{SERVICENAME} stop

lub

service {SERVICENAME} stop

Włącz usługę:

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

( S95służy do określenia kolejności. S01 uruchomi się przed S02 itp.)

Wyłącz usługę:

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

 

Systemd

Najbardziej zauważalną dystrybucją używającą systemd jest Fedora. Chociaż jest używany przez wiele innych. Dodatkowo, z uwagi na to, że Debian zdecydował się na systemd over upstart, stanie się defacto systemem upstart dla większości dystrybucji (ubuntu już zapowiedziało, że będzie upstart dla systemd).

Lista usług:

systemctl list-unit-files

Uruchomić usługę:

systemctl start {SERVICENAME}

Zatrzymaj usługę:

systemctl stop {SERVICENAME}

Włącz usługę:

systemctl enable {SERVICENAME}

Wyłącz usługę:

systemctl disable {SERVICENAME}

 

Dorobkiewicz

Upstart został opracowany przez ludzi z Ubuntu. Ale kiedy Debian zdecydował się na systemd , Ubuntu ogłosiło, że porzuci start .

UpHart był również krótko używany przez RedHat, ponieważ jest obecny w RHEL-6, ale nie jest powszechnie używany.

Lista usług:

initctl list

Uruchomić usługę:

initctl start {SERVICENAME}

Zatrzymaj usługę:

initctl stop {SERVICENAME}

Włącz usługę:

Niestety 2 sposoby:

  1. Będzie plik /etc/default/{SERVICENAME}zawierający linię ENABLED=.... Zmień tę linię na ENABLED=1.

  2. Będzie plik /etc/init/{SERVICENAME}.override. Upewnij się, że zawiera start(lub jest całkowicie nieobecny), a nie manual.

Wyłącz usługę:

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

Uwaga: Istnieje również system inicjujący „OpenRC”, z którego korzysta Gentoo. Obecnie Gentoo jest jedyną dystrybucją, która z niego korzysta, i nie jest rozważana do użytku ani obsługiwana przez żadną inną dystrybucję. Więc nie omawiam jego użycia (choć jeśli tak, to mogę to dodać).

Patrick
źródło
OpenRC jest swego rodzaju abstrakcją dla SysVinit. Nie zastępuje go, dodaje do niego.
Spidey
Świetny opis! Tylko kilka drobnych poprawek: RHEL 6.x (a więc CentOS 6.x i reszta pochodnych) używa upstart, podobnie jak Ubuntu (chociaż większość usług i tak używa skryptów SysV). Dodam też, że „chkconfig” (RH) i „update-rc.d” (Debian) to „oficjalne” sposoby dodawania linków do katalogów rc? .D.
rsuarez,
@rsuarez dobry punkt na temat RHEL6. Chociaż wydaje się, że niewiele z niego korzysta. Większość systemu nadal działa przez starszą wersję SysVinit (17 upstart, 89 SysVinit na jednym z moich systemów RHEL6). A chkconfigi update-rc.dsą wymienione. Zobacz drugi akapit pod SysVinit :-)
Patrick
@Patrick zgadza się na nr 1; „ups!” on # 2 :-)
rsuarez
1
Dzięki za wyczerpującą odpowiedź, teraz mam duży obraz. Obecnie używam Debiana (najnowsza stabilna wersja), tutaj w niemieckojęzycznej Europie ma najlepsze rekomendacje, ale może spróbuję.
Erdinc Ay
9

Różne dystrybucje używają różnych mechanizmów do zarządzania usługami. Oprogramowanie do zarządzania usługami nazywa się init , od tradycyjnej nazwy pierwszego procesu (z identyfikatorem procesu 1), który odpowiada za uruchomienie innych.

Debian używa tradycyjnego wariantu SysVinit z init. W tym systemie w katalogu znajduje się kolekcja skryptów /etc/init(ta i inna lokalizacja mogą się nieznacznie różnić między dystrybucjami korzystającymi z SysVinit). Skrypty te nie są wywoływane bezpośrednio, ale poprzez dowiązania symboliczne w katalogach /etc/rc?.d. To obecność i nazwa tych symbolicznych łączy decyduje o uruchomieniu usług. Aby uzyskać więcej informacji, przeczytaj rozdział o init w Debian Reference .

Sprawdź, /etc/rc?.djakie usługi są już dostępne. Litera lub cyfra przed kropką to poziom działania; wpisy, których nazwa zaczyna się od, Ssą wykonywane z argumentem startpodczas wchodzenia na poziom uruchamiania, a wpisy, których nazwa zaczyna się od, Ksą wykonywane przy opuszczaniu poziomu pracy. Normalna sekwencja poziomu uruchamiania to: S podczas rozruchu (tak /etc/rcS.d/S*są wykonywane), a następnie 2 (tak /etc/rc2.d/S*są wykonywane). W czasie zamykania /etc/rc2.d/K*są wykonywane, a następnie poziom uruchamiania przełącza się na 0 (lub 6 w celu ponownego uruchomienia).

Krótko mówiąc, jeśli chcesz utworzyć skrypt startowy dla nowej usługi:

  • Napisz skrypt powłoki /etc/init.d. Ten skrypt musi przyjmować jeden argument, który może być start, stop, force-reload, restartlub (opcjonalnie) reloadlub status. Różnica pomiędzy reloada restartjest restartto równoważne stopnastępnie startczas reloadprzeładowuje konfigurację bez zatrzymywania nic (jeżeli dana usługa to); force-reloadrobi, reloadjeśli są dostępne i restartinaczej. Zobacz istniejące pliki i Tworzenie skryptów uruchamianych przy starcie systemu Debian na przykład.
  • Uruchom, update-rc.daby utworzyć symboliczne linki do uruchomienia i zatrzymania usługi. Większość usług działa na poziomach 2, 3, 4 i 5.

Pamiętaj, że aby zapewnić dostęp do svn, łatwiej jest skonfigurować Apache i używać protokołu HTTP lub HTTPS. Ma to tę dodatkową zaletę, że umożliwia szybkie przeglądanie repozytorium przez przeglądarkę internetową.

Gilles
źródło
2

Z tradycyjnego tła uniksowego w usługach nie ma nic specjalnego. Usługi to tylko proces, ale z dwoma wyjątkami: nie potrzebują terminala i zaczynają się przy starcie systemu. sposób, w jaki zaczynają się przy starcie, zależy od init (którym może być sysv init, bsd init, upstart, systemd lub coś innego; sprawdź swoją stronę podręcznika użytkownika dla init) i od tego, czy używasz opakowania dla zadania czy konfiguracji init. Nic nie stoi na przeszkodzie, abyś uruchomił usługę z terminala, w rzeczywistości jest to powszechne do celów testowych.

Hildred
źródło