Czy istnieje standardowy sposób uruchamiania i zatrzymywania usług w systemie Linux?


15

Do niedawna istniał prosty i skuteczny sposób na uruchomienie / zatrzymanie / ponowne uruchomienie usług:

service nginx start|stop|restart

Działało to doskonale przez tak wiele lat ... dopóki niektóre inteligentne spodnie nie zdecydowały się je ulepszyć, a teraz mam do czynienia z systemami Debian / Ubuntu, w których serviceskrypt nic nie robi (ponieważ mam używać takich rzeczy systemctl start nginx.service(znacznie dłużej, brak automatycznego uzupełniania działa ...)

Moje pytanie dotyczy szczególnie Debiana i Ubuntu, ale pomocne byłoby również objęcie dystrybucji CentOS / RedHat.

Czy jest coś, co może mnie ocalić od tych skazanych na porażkę zmian?

W przypadku, gdy nie było to jasne, szukam spójnego sposobu radzenia sobie z tymi, który działałby na Debianie 7.x, 8.x, najnowszym Ubuntu LTS i innym niż LTS.

PS. Poza zakresem tego konkretnego pytania, ale dodatkowe wyróżnienia są przyznawane, jeśli rozwiązanie obejmowałoby również włączanie i wyłączanie części dla usług.


5
Uzupełnianie tabulatorów działa dla systemctl dla mnie ... I nieważne, systemd jest teraz de facto standardem: równie dobrze może się do tego przyzwyczaić.
jasonwryan

1
Dodatkowo: jeśli polecenie serwisowe stanie się bezużyteczne, czy mogę je usunąć? Jaki pakiet to zapewnia?
sorin

3
Czy nie ma sensu zastępować starego servicepolecenia opakowaniem, które zamiast tego wywołuje servicectl?
sorin

4
@jasonwryan Tak, ale można również zrobić tylko to , i owinięcie mógł go obsłużyć, dzięki czemu przejście na Systemd Smoother dla użytkowników.
Dmitrij Grigoriew

2
Czy servicenaprawdę nic dla ciebie zrobić? Działa zgodnie z oczekiwaniami na moim LMDE (który jest w zasadzie testowaniem Debiana), nie sądziłem, że była to sprawa specyficzna dla LMDE. Działa również zgodnie z oczekiwaniami w mojej maszynie Wirtualnej Ubuntu.
terdon

Odpowiedzi:


6

W jego splątanej historii istniało wiele różnych systemów kontroli rozruchu i usług na platformach Unix.

System service\chkconfigoparty na prostym i skutecznym systemie jest ogólnie nazywany stylem SysVinit i był ważnym krokiem na drodze do pewnego rodzaju standaryzacji. Ten styl rozruchu znajdziesz na RHEL / CentOS (EL) w wersji 6, Fedora w wersji 14 oraz w dystrybucji opartej na Debian / Ubuntu do 2015 roku. Nie był to jednak jedyny dostępny system rozruchowy, (prostszy) styl BSD System init wciąż ma wielu fanów.

SysVinit nie był idealnym rozwiązaniem (co to jest?), A Systemd został opracowany w celu przezwyciężenia wielu problemów; to jest systemctlsystem oparty na poleceniach, którego obecnie doświadczasz. Chociaż nie jest to powszechnie lubiane (ludzie nienawidzą zmian, wzdęć itp.), Nie ma wątpliwości, że szybko staje się standardem defacto w większości dystrybucji.

Dlatego patrząc niezwłocznie przekazuje odpowiedzi na swoje oryginalne pytanie jest prosta: standardowy sposób do służb kontrolnych całej większości dystrybucji Linuksa jest teraz ! Nikt nie zgadnie, jak długo to się utrzyma; prawdopodobnie tylko do momentu, gdy pojawi się coś, co będzie lepsze i stanie się powszechnie przyjęte.
systemctl

Jestem pewien, że będą dostępne opakowania, które pozwolą, twojemu ulubionemu, na service/chkconfigpolecenia, aby kontynuować robienie głównie zdrowych rzeczy, ale z tą szczególną krzywą uczenia się prawdopodobnie najlepiej nie walczyć z tym. Może z niecierpliwością oczekuję, że przez pewien czas pojawią się również systemctlopakowania dla starszych systemów, aby zarządzanie nimi wraz z bardziej aktualnymi było mniej uciążliwe;)


A wcześniej było to xinetd, a wcześniej inetd
jas-

@ jas- Myślę, że inetd to same usługi, wierzę, że mogą istnieć we wszystkich systemach rozruchowych. Są one szczególnym rodzajem usług, ponieważ stanowią alternatywę dla niektórych innych usług jako pełnych usług, oferując je na żądanie . Rozumiem, skąd pochodzisz w kontekście tego Q, tylko kolejny sposób na rozpoczęcie świadczenia usług.
DanSut

We wszystkich dystrybucjach; gentoo, centos, redhat, debian, ubuntu itp., xinetd i poprzednio inetd składały się z małego skryptu powłoki do uruchamiania, zatrzymywania i przeładowywania konfiguracji dla różnych usług, ale tak, masz rację, tak naprawdę była to usługa taka jak systemd.
jas-

Ubuntu używa upstartu od 6.10, a Fedora od 9 (dopóki nie zostały zastąpione przez systemd) upstart.ubuntu.com , i można było zmienić Debiana z sysvinit na kilka lat ...
James Tocknell

5

Czy [sens] nie ma sensu zastępować starego servicepolecenia opakowaniem, które servicectlzamiast tego wywołuje [sic]?

Tak, ale […] opakowanie może sobie z tym poradzić, dzięki czemu przejście do systemd jest płynniejsze dla użytkowników.

… Co, jak powiedzieli inni w komentarzach, zostało już dawno zrobione .

/usr/sbin/serviceKomenda na Debianie 8 jest częścią pakietu sysvinit-utils. Jest obecny od 2009 roku. Jest to specyficzny dla Debiana dodatek pochodzący od RedHata do oryginalnego pakietu źródłowego sysvinit, i jak widać po przeczytaniu skryptu, rozpoznaje on zarówno uruchamianie systemu, jak i obecność poprawnych zadań, wyodrębnianie poleceń do systemctli initctl( odpowiednio poprzez aliasy). Robi to od 2013 r.

service name actionjest dość szeroko dostępny nawet w systemach operacyjnych innych niż Linux. Działa nawet na większości BSD, ponieważ one także mają własne servicepolecenia. W servicepakiecie nosh znajduje się także polecenie shim, które tłumaczy . Ale …system-control action name

  • … Wyjdź poza ten wspólny podzbiór, a kompatybilność jest znacznie mniejsza.
  • … OpenBSD nie ma servicepolecenia.
  • serviceKomendy BSD mają znane od dawna problemy, o których administratorzy systemów opowiadali historie wojenne od dziesięcioleci.

Włączanie i wyłączanie usług jest podobną sytuacją. Chociaż chkconfigprogram SuSE (dostępny w pakiecie dla Debiana i Ubuntu) bardzo różni się od programu Fedora (są one napisane w zupełnie innych językach programowania, nawet - jeden skompilowany, jeden zinterpretowany), istnieje wspólna minimalna składnia, z działaniem będącym lub . Ale …chkconfig name actiononoff

  • … Ponownie, poza tym wspólnym podzbiorem jest mniejsza kompatybilność.
  • … Nie ma chkconfigna BSD, ponieważ konwencjonalnymi narzędziami do tego są albo sysrcnajnowszy OpenBSD rcctl enablei rcctl disable. Są chkconfigi rcctlpodkładki w pakiecie nosh, które tłumaczą na i .system-control enable namesystem-control disable name
  • … Tylko Fedora chkconfigwie o systemd i działa jako podkładka dla systemctl enablei systemctl disable. SuSE chkconfignie ma wiedzy o systemie.

Dalsza lektura


2

Nie ma standardowego sposobu uruchamiania i zatrzymywania usług w systemie Linux.

czy jest coś, co może mnie ocalić od tych skazanych na porażkę zmian?

Wypróbuj narzędzie do zarządzania konfiguracją / aranżacji: Ansible , Chef , Saltstack , Puppet lub cokolwiek innego.

Możesz uruchomić i włączyć usługę za pomocą Ansible:

ansible all -i inv -m service -a 'name=service-name state=started enabled=true'

Spójrz na klasę LinuxService w servicemodule Ansible :

Jest to klasa manipulacji usługą Linux - obecnie obsługuje ona kombinację plików binarnych i skryptów init do kontrolowania usług uruchamianych podczas rozruchu, a także do kontrolowania bieżącego stanu.


Jakoś wydaje się, że faceci Ubuntu byli w stanie utrzymać skrypt usługi działający po przejściu na systemd. Zajrzenie do środka wydaje się być na tyle sprytne, by użyć właściwego zaplecza. Nie można tego samego powiedzieć o Debianie.
sorin



1

Problem polega na tym, że Debian / Ubuntu przeszedł na nowy systemdjako zamiennik starego sysvinit. Zapytaj, który z nich jest lepszy, a zaczniesz wojnę z ogniem, ale zawsze możesz wrócić do starego sysvinit, zaznacz to, jeśli chcesz wrócić.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.