Jak włączyć lub wyłączyć usługi?

821

Czytam o tym, jak włączać i wyłączać usługi w Ubuntu i wydaje się, że istnieją różne możliwości zarządzania nimi.

Pierwszą metodą, którą znalazłem, jest update-rc.ddodanie nowych usług do uruchamiania, które mają na celu /etc/init.dfolder i jego zawartość.

Drugim, który znalazłem, jest edycja .confplików w /etc/initfolderze.

Jaki jest zalecany sposób włączania / wyłączania / dodawania usług i dlaczego?

Czy możesz podać krótki, kuloodporny przykład krok po kroku, jak dodać usługę w Ubuntu oraz włączyć i wyłączyć tę usługę?

NES
źródło
1
Informacje na temat współpracy w sieci można znaleźć na stronie: askubuntu.com/questions/230698/...
Jorge Castro,
To byłoby pomocne dla tych, którzy utknęli na Fedorze 12 i wylądował tutaj. Jeśli linkrot chkconfigjest tym, czego szukasz.
Krwawiące palce
3
Zauważ, że wciąż brakuje tutaj odpowiedzi na Ubuntu 14.04.
Reinier Post,
2
@MarcelloNuccio: Począwszy od wersji Ubuntu 15.04, Upstart został wycofany na korzyść Systemd.
Dan Dascalescu,
Programy autostartu są konfigurowane w autostartmanifestach lub w *.serviceplikach w kilku lokalizacjach, a także w init.dlub crontab. Zobacz: unix.stackexchange.com/a/525845/43233
Noam Manos

Odpowiedzi:

831

Istnieją usługi, które można włączyć / wyłączyć za pomocą GUI (np. startupAplikacji) lub terminala.

Dla terminalu masz kilka opcji. Najpierw otwórz terminal (wpisz na przykład „terminal” w myślniku i otwórz go). Następnie:

Tymczasowe włączanie / wyłączanie usług

Aby tymczasowo zatrzymać i uruchomić usługi (nie włącza / nie wyłącza ich dla przyszłych rozruchów), możesz wpisać service SERVICE_NAME. Na przykład:

  • sudo service apache2 stop(Will STOP usługę Apache do restartu lub do momentu uruchomienia go ponownie).

  • sudo service apache2 start(Will START usługę Apache zakładając, że został zatrzymany wcześniej.).

  • service apache2 status (Powie Ci STATUS usługi, jeśli jest ona włączona / działa wyłączona / NIE działa.).

  • sudo service apache2 restart( ZRESTARTUJE usługę. Jest to najczęściej używane po zmianie, plik konfiguracyjny. W tym przypadku, jeśli zmieniłeś konfigurację PHP lub konfigurację Apache. Ponowne uruchomienie zaoszczędzi ci konieczności zatrzymywania / uruchamiania z 2 wierszami poleceń )

  • service apache2(W tym przypadku, ponieważ nie wspominałeś o AKCJI do wykonania dla usługi, pokażą ci wszystkie opcje dostępne dla tej konkretnej usługi.) Ten aspekt różni się w zależności od usługi, na przykład w przypadku MySQL, wspomina tylko, że to brakuje parametru. W przypadku innych usług, takich jak usługa sieciowa, wspomniano by o małej liście wszystkich dostępnych opcji.


SYSTEMD

Począwszy od wersji Ubuntu 15.04, Upstart zostanie wycofany na korzyść Systemd. Z Systemd do zarządzania usługami możemy wykonać następujące czynności:

systemctl start SERVICE- Użyj go, aby uruchomić usługę. Nie utrzymuje się po ponownym uruchomieniu

systemctl stop SERVICE- Użyj go, aby zatrzymać usługę. Nie utrzymuje się po ponownym uruchomieniu

systemctl restart SERVICE - Użyj go, aby ponownie uruchomić usługę

systemctl reload SERVICE - Jeśli usługa to obsługuje, przeładuje powiązane z nim pliki konfiguracyjne, nie przerywając żadnego procesu korzystającego z usługi.

systemctl status SERVICE- Pokazuje status usługi. Informuje, czy usługa jest obecnie uruchomiona.

systemctl enable SERVICE- Włącza usługę, przy następnym uruchomieniu lub następnym uruchomieniu zdarzenia. Utrzymuje się po ponownym uruchomieniu.

systemctl disable SERVICE- Wyłącza usługę przy następnym uruchomieniu lub następnym zdarzeniu zatrzymania. Utrzymuje się po ponownym uruchomieniu.

systemctl is-enabled SERVICE - Sprawdź, czy usługa jest obecnie skonfigurowana do uruchamiania przy następnym uruchomieniu.

systemctl is-active SERVICE - Sprawdź, czy usługa jest obecnie aktywna.

systemctl show SERVICE - Pokaż wszystkie informacje o usłudze.

sudo systemctl mask SERVICE- Całkowicie wyłącz usługę, łącząc ją z /dev/null; nie można uruchomić usługi ręcznie lub włączyć usługi.

sudo systemctl unmask SERVICE- Usuwa łącze do /dev/nulli przywraca możliwość włączenia lub ręcznego uruchomienia usługi.


UPSTART (przestarzałe od 15.04)

Jeśli chcemy skorzystać z oficjalnej metody Upstart (zauważ, że na razie nie wszystkie usługi zostały przekształcone w Upstart), moglibyśmy użyć następujących poleceń:

status SERVICE- To powie nam, czy konwertowana usługa jest uruchomiona, czy nie. Zauważ, że to jest zastąpiona start, stop, statusi restart. Poinformuje nas również, jeśli usługa nie została jeszcze przekonwertowana na upstart:

Konwertowana usługa zwykle wyświetla bieżący stan (Uruchomienie, Uruchomienie, Zatrzymanie ...) i identyfikator procesu. Nie przekonwertowana usługa spowodowałaby błąd dotyczący nieznanego zadania .

Niektóre skróty mogą działać tylko z servicepowyższym poleceniem, ale nie z poniższymi poleceniami, chyba że zostaną w 100% przekonwertowane na usługi upstart:

  • START -sudo start mysql

  • STOP -sudo stop mysql

  • RESTART -sudo restart mysql

  • STATUS -sudo status smbd

Włączanie / wyłączanie usługi

Aby przełączyć usługę z trwałego uruchamiania lub zatrzymywania, musisz:

echo manual | sudo tee /etc/init/SERVICE.override

gdzie zwrotka manualpowstrzyma Upstart przed automatycznym ładowaniem usługi przy następnym uruchomieniu. Każda usługa z .overridezakończeniem ma pierwszeństwo przed oryginalnym plikiem usługi. Będziesz mógł uruchomić usługę dopiero później. Jeśli nie chcesz tego, po prostu usuń .override. Na przykład:

echo manual | sudo tee /etc/init/mysql.override

Przełącza usługę MySQL w manualtryb. Jeśli tego nie chcesz, możesz po prostu to zrobić

sudo rm /etc/init/mysql.override

i Uruchom ponownie, aby usługa uruchomiła się automatycznie. Oczywiście, aby włączyć usługę, najczęstszym sposobem jest jej instalacja. Jeśli zainstalujesz Apache, Nginx, MySQL lub inne, zostaną one automatycznie uruchomione po zakończeniu instalacji i będą uruchamiane przy każdym uruchomieniu komputera. Wyłączenie, jak wspomniano powyżej, spowoduje skorzystanie z usługi manual.

Luis Alvarado
źródło
Czy musisz dodać .servicedo każdego polecenia? systemctl mongod statusdziałało dobrze.
Dan Dascalescu,
@ DanDascalescu nie, nie, ale pozwól mi wyjaśnić, że tam.
Luis Alvarado,
4
Czy plik .override powinien zostać umieszczony w /etc/init.d/, tj. Gdzie jest umieszczona usługa?
Obi Wan - PallavJha,
Dlaczego Upstart jest przestarzały w 15.04? jaki jest właściwy sposób uruchamiania skryptów podczas uruchamiania / restartowania w Ubuntu 16.04 lub nowszym?
Kamalakannan J
1
Dzięki za tę kompleksową odpowiedź. systemdZestaw poleceń działa wspaniale na Ubuntu 18.04.
Doktor J
355

Obecnie istnieją trzy różne sposoby uruchamiania oprogramowania jako usługi w Ubuntu, SysV , Upstart i systemd . Usługa jest tutaj definiowana jako program uruchamiany przez system w tle, w przeciwieństwie do programu uruchamianego i uruchamianego bezpośrednio przez użytkownika.

SysV

Tradycyjnym sposobem uruchamiania usług w Linuksie było umieszczenie skryptu /etc/init.d, a następnie użycie update-rc.dpolecenia (lub w dystrybucjach opartych na RedHat chkconfig), aby go włączyć lub wyłączyć.

To polecenie używa nieco skomplikowanej logiki do tworzenia dowiązań symbolicznych /etc/rc#.d, które kontrolują kolejność uruchamiania usług. Jeśli uruchomisz ls /etc/rc2.d, zobaczysz kolejność, w której usługi zostaną zabite z nazwą pliku podobną do nazw plików K##xxxxi uruchomioną z nazwami plików S##xxxx. ##W S##xxxxoznacza „porządek startowy” dla służby xxxx. I odwrotnie, ##in K##xxxxoznacza rozkaz zabicia dla usługi xxxx.

Jednym z głównych problemów z SysV było to, że podczas uruchamiania systemu wszystko musiało być wykonywane szeregowo, jedna po drugiej, dzięki czemu czasy uruchamiania systemu były naprawdę powolne . Próbowano to zrównoważyć, ale były przypadkowe i trudno było w pełni je wykorzystać. To był główny powód, dla którego stworzono Upstart .

Dorobkiewicz

Upstart używa plików definicji zadań w /etc/initcelu określenia, jakie zdarzenia powinna uruchomić usługa. Tak więc, podczas uruchamiania systemu, upstart przetwarza różne zdarzenia, a następnie może uruchomić wiele usług równolegle. Pozwala im to w pełni wykorzystać zasoby systemu, na przykład uruchamiając usługę związaną z dyskiem, gdy działa inna usługa związana z procesorem lub gdy sieć czeka na przydzielenie dynamicznego adresu IP.

Możesz zobaczyć wszystkie pliki zadań upstart, uruchamiając ls /etc/init/*.conf

Pozwól mi tylko zatrzymać się tutaj i powiedzieć, że jeśli nie wiesz, co to jest usługa lub co ona robi, NIE wyłączaj jej!

Nie wszystkie usługi zostały przekonwertowane na upstart. Pracując w zespole serwerów w Canonical przez ostatnie kilka miesięcy, pracowałem nad wieloma skonwertowanymi plikami zadań, a najmilszą częścią jest to, że pozwala pozbyć się całej „magii” skryptu i po prostu włożyć kilka poleceń tu i tam, aby dokładnie określić sposób uruchomienia usługi i nic więcej. Ale na razie tylko kilka tradycyjnych usług sieciowych, takich jak kałamarnica i samba , zostało przekonwertowanych.

Czy usługa jest oparta na upartach?

Aby dowiedzieć się, czy usługa jest oparta na wstępie, możesz uruchomić komendę status:

status servicename

Jeśli jest to praca upstart , pokaże to:

$ status statd
statd start/running, process 942

Ale jeśli nie, zobaczysz coś takiego:

$ status apache2
status: Unknown job: apache2

W tym przypadku apache2nie został przekonwertowany na upstart . Aby wyłączyć apache2, po prostu biegnij

sudo update-rc.d apache2 disable
sudo service apache2 stop

Wyłącz usługi (zadania) na początku

Definicje zadań wstępnych nie mają update-rc.dpolecenia. Aby wyłączyć zadanie, musisz bezpośrednio edytować plik zadania, aby go wyłączyć. Można to zrobić na dwa sposoby.

Jeśli nadal chcesz ręcznie go uruchomić, musisz skomentować ten start onwarunek. Powiedz, że chcesz zainstalować sambę , ale nie uruchamiaj jej automatycznie. Oto plik zadania (w natty):

description "SMB/CIFS File Server"
author      "Steve Langasek <[email protected]>"

start on local-filesystems
stop on runlevel [!2345]

respawn

pre-start script
    RUN_MODE="daemons"

    [ -r /etc/default/samba ] && . /etc/default/samba

    [ "$RUN_MODE" = inetd ] && { stop; exit 0; }

    install -o root -g root -m 755 -d /var/run/samba
end script

exec smbd -F

Aby wyłączyć sambę , możesz po prostu umieścić znak #start on local-filesystems”. Pamiętaj, że chociaż nie można go ponownie uruchomić przy starcie systemu, tym razem musisz go zatrzymać

sudo service smbd stop

Jeśli jednak nie chcesz nigdy uruchamiać samby , sugeruję usunięcie pakietu. Jeśli jednak chcesz go zainstalować, ale nie można go uruchomić, możesz także:

mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled

Wyłącz usługę przy użyciu sekcji start / stop (od 11.04)

Począwszy od wersji nowobogackich, która będzie w 11.04, nie jest nowe słowo kluczowe, który wyłącza start oni stop onstrofy: manual. Tak więc innym sposobem wyłączenia usługi od 11.04 jest:

echo 'manual' | sudo tee /etc/init/mysql.override

# command from root shell
echo manual >> /etc/init/mysql.override

Możesz utworzyć overrideplik, aby wyłączyć usługę bez edytowania definicji zadania, po prostu umieszczając w nim manualsłowo kluczowe.

Spamapy
źródło
20
Wygląda na to, że 11.04 też się zmieniło. echo manual >> /etc/init/<service>.overrideJest więc preferowane, ponieważ pozostawia nienaruszony oryginalny plik .conf. W każdym razie szkoda, że ​​takie podstawowe włączanie / wyłączanie zajęło 3 lata i nie ma do tego GUI.
MestreLion
3
update-rc.d jest naprawdę
ważny
2
wydaje się znacznie lepiej radzić sobie z oryginalnym tematem niż z odpowiedzią oznaczoną jako błędna odpowiedź z oryginalnego plakatu z pytaniami. Dzięki! :)
Henning
1
W moim przypadku, plik /etc/init/ssh.confistnieje, ale status sshi status sshdzarówno mówią „Nieznany praca”. Ta odpowiedź nie wydaje się dotyczyć takiej możliwości?
Brian Z
1
status sshdaje mi również „ service ssh status
Nieznaną
129

sysv-rc-conf

Spróbuj użyć sysv-rc-conf

sudo apt-get install sysv-rc-conf

i aby rozpocząć zarządzanie usługami, wykonaj

sudo sysv-rc-conf

Które wywoła interaktywne okno takie jak to

wprowadź opis zdjęcia tutaj

Możesz dalej poruszać się po stronach za pomocą Ctrl+nnastępnej strony i Ctrl+ppoprzedniej strony. Możesz włączać i wyłączać usługi, wybierając SPACEżądane poziomy pracy.

Jobs-Admin

Inną alternatywą byłby Jobs-Admin , instalując przez

sudo apt-get install jobs-admin

Który zapewnia również GUI w ten sposób

podgląd zadań-administrator

Aby wyświetlić więcej zadań, musisz zaznaczyć opcję Pokaż chronione prace z menu.

chkconfig

Trzecią opcją byłoby chkconfig ,

sudo apt-get install chkconfig

Można go używać za pomocą interfejsu CLI chkconfig, wyświetlając listę zadań włączania / wyłączania. Możemy również przeglądać usługi systemowe za pomocąchkconfig –list

Usługi można włączyć za pomocą

chkconfig <service> on

Usługi można wyłączyć za pomocą

chkconfig <service> off

Możemy nawet dodać własną usługę, używając odpowiedniego skryptu inicjującego z odpowiednimi nagłówkami.

chkconfig --add <service>

update-rc.d

Inna opcja może być wymieniona tutaj update-rc.d , wyjaśniona tutaj krótko .

Zauważ, że w Ubuntu Server 12.04 update-rc.d jest używany zamiast chkconfig.

atenz
źródło
1
na serwerze Ubuntu:Package chkconfig is not available, but is referred to by another package.
pwned
@pwned Możesz edytować i publikować zaktualizowane informacje dotyczące edycji serwera.
atenz
Zrobiłem tak, jak zasugerowałeś, teraz jest to do wzajemnej oceny.
pwned
jobs-admin nie pozwala zmieniać zadań (Ubuntu 14.04), zamiast tego tworzy raport o awarii ;-)
Sadi
5
sysv-rc-conf nie nadaje się do użytku z upstartem lub systemdem, jest to najwyraźniej tylko stary system rc System 5, który nie był domyślny w Ubuntu Linux od prawie dekady. Debian Bug # 791689 uznaje to i pyta, dlaczego nie został oznaczony jako sprzeczny z systemd.
JdeBP,
48

Myślę, że dla tych z nas, którzy używają Ubuntu przez ssh, najlepszym rozwiązaniem jest rcconfprogram tekstowy:

sudo apt-get install rcconf
sudo rcconf

alternatywny tekst

Nawiguj za pomocą klawiszy tabulatorów i strzałek, naciśnij spację, aby włączyć / wyłączyć. Zmiany są trwałe po ponownym uruchomieniu.

Zrzut ekranu zapożyczony z tego posta na blogu , który również pokazuje sysv-rc-conf- podobne narzędzie, które pozwala również ustawić poziom działania. (Dla tych, którym akurat zależy na poziomach pracy, chce je zmienić :)

Niestety, rcconf nie działa z upstartem (usługi wymienione w /etc/init/*), tylko z tradycyjnym mechanizmem ( ls -l /etc/init.d/*- tymi, które nie są dowiązaniami symbolicznymi).

Na szczęście wiele usług istotnych podczas ssh-in na serwerze (Apache, Tomcat, mdadm, boinc-client ...) nie zostało jeszcze przeniesionych na wyższy poziom.

jg-faustus
źródło
6
Czy to nadal działa z upstart?
oktosiTe
3
Niestety nie. Ale zadziałało we wszystkich przypadkach, które chciałem zmienić - początkowe zadania wydają się głównie rzeczami, których nigdy nie chcę wyłączać - zegar sprzętowy, demon dziennika, sieć itp. (Przynajmniej na serwerze Ubuntu). Ale warto o tym pamiętać (nie byłem :), zaktualizowałem post.
jg-faustus
Niestety mysql został przekonwertowany na upstart. I to jest usługa, z której korzystam tylko podczas wykonywania jakiegoś projektu.
MestreLion
W systemie Ubuntu 12.04 występuje błąd związany z rcconf, który uniemożliwia uruchomienie programu. Aby rozwiązać problem, musisz zainstalować pakiet okna dialogowego.
devius
1
Ponieważ ta odpowiedź została napisana, update-rc.dzostała zmieniona, a niektóre jej przestarzałe funkcje zostały usunięte . Błąd Debiana # 727735 zauważa, że ​​rcconf nie został zmieniony w celu dopasowania. I nie, rcconf również nie działa z systememd, dlatego nie można go zastosować do żadnego z domyślnych systemów inicjujących dla Ubuntu Linux przez ostatnią dekadę.
JdeBP,
18

Dowiedziałem się, że istnieje to narzędzie GUI, coś w rodzaju BUM, ale kompatybilne z Upstart:

  • Jobs-Admin

    sudo apt-get install jobs-admin
    
Postadelmaga
źródło
Ale jest to zbyt proste i nie pozwala zmieniać „chronionych zadań” (co to jest jobbs? Apple ma Jobs, system operacyjny ma demony!)
kakaz,
Nie pozwalam nawet zmieniać „niezabezpieczonych zadań” (Ubuntu 14.04), zamiast tego produkuję raport o awarii ;-)
Sadi
12

Edycja istniejącego pliku konfiguracji początkowej (jak opisano powyżej) nie jest dobrym pomysłem. Zaktualizowany pakiet może zawierać zaktualizowaną konfigurację i trzeba będzie powtarzać zmiany w kółko.

Rzucając okiem na man 5 initjedno, znajdziesz bardziej odpowiednie rozwiązanie: używając konfiguracji zastępowania. Krótki przykład: powiedzmy, że mamy usługę o nazwie „foobar”, więc będzie plik o nazwie /etc/init/foobar.confz konfiguracją upstart. Teraz nie chcesz usuwać tego pliku ani go modyfikować - ale nie chcesz, aby ta usługa była uruchomiona? Więc umieścić nadpisania pliku obok niego: /etc/init/foobar.override, zawierającą (opcjonalnie nagłówek z opisem) zamiast tego start on/ stop onLinie umieścić linię jednym słowem: manual. W ten sposób powiesz upstartowi, aby po prostu używał foobar.conf, ale przesłonisz definicję uruchamiania, aby uruchomić tę usługę tylko wtedy, gdy zostanie ręcznie wymuszone ( service foobar startw naszym przykładzie).

Izzy
źródło