Zarządzanie usługami startowymi i skryptami w systemie Linux

W tym artykule omówimy podstawy zarządzania usługami startowymi i skryptami w Linux CentOS 7/8. W szczególności przeanalizujemy podstawy pracy z demonem systemd, naucz się dodawać usługi do uruchamiania i usuwać je stamtąd, a także rozważyć alternatywne opcje uruchamiania skryptów lub demonów po uruchomieniu systemu.

Celem tego artykułu jest nauczenie Cię szybkiego ustalania list usług i skryptów uruchamianych automatycznie w systemie Linux, dodawania usług lub skryptów do uruchamiania lub wyłączania automatycznego uruchamiania niektórych programów.

Treść

  • Systemd: kontrola uruchamiania usługi w systemie Linux
  • Automatyczne uruchamianie skryptów i usług przy użyciu rc.local
  • Utwórz własnego demona i dodaj go do systemd
  • Autostart przez cron
  • .bashrc: skrypty autostartu podczas uruchamiania terminalu

Systemd: kontrola uruchamiania usługi w systemie Linux

W większości popularnych, nowoczesnych i popularnych dystrybucji Linuksa (CentOS 7, RHEL, Debian, Fedora i Ubuntu) jako demon startowy zamiast init.d jest używany systemd. Systemd - Menedżer systemu i usług systemu Linux, używany do uruchamiania innych demonów i zarządzania nimi podczas pracy, korzysta z plików jednostkowych z / etc / systemd / system (init.d używał skryptów z katalogu /etc/init.d/). Systemd umożliwia równoległe uruchamianie usług podczas procesu rozruchu, przyspieszając tym samym uruchamianie.

Aby kontrolować system, użyj polecenia systemctl.

Najpierw po załadowaniu systemu sprawdzimy listę jednostek, które są obecnie dodawane systemd:

systemctl list-units

Listę plików jednostek można uzyskać za pomocą polecenia:

systemctl list-unit-files

To polecenie wyświetli wszystkie dostępne pliki jednostek (niezależnie od tego, czy zostały załadowane systemd po załadowaniu systemu operacyjnego lub nie).

Aby wyświetlić listę aktywnych usług i ich status, wykonaj:

# systemctl list-units -t service

Następujące polecenie wyświetli listę jednostek, które pobrały lub próbowały załadować systemd. Ponieważ po uruchomieniu niektóre jednostki mogą stać się nieaktywne, używając flagi -wszystko otrzymasz pełną listę.

# systemctl list-units --all

JEDNOSTKA ZAŁADUJ AKTYWNY SUB OPIS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ● exim.service nie znaleziono nieaktywny martwy exim. usługa firewalld.service załadowany aktywny uruchomiony firewalld - demon zapory dynamicznej [email protected] załadowany aktywny uruchomiony Getty na tty1 ● ip6tables.service nie znaleziono nieaktywny martwy ip6tables.service ● ipset.service nie znaleziono nieaktywny martwy ipset.service ● iptables. usługa nie znaleziona nieaktywna martwa iptables.service Przyspieszenie / wyłączenie sieci ● NetworkManager-wait-online.service nie znaleziono nieaktywna martwa 

Jak widać z listy, wyświetlane są tutaj nawet usługi, których nie znaleziono na dysku „nie znaleziono”..

Za pomocą tego polecenia możesz dodać inne flagi, na przykład:

  • -stan - służy do określania statusu demona Load, Active, Sub
  • -typ - pozwala filtrować jednostki według typu.

Przykłady:

systemctl list-units --all --state = aktywny - wyświetli tylko aktywne jednostki

systemctl list-units -type = service - wyświetli listę jednostek, które są usługą.

Dodanie usługi do systemd

Aby zarządzać usługami w systemd używana jest specjalna składnia. Po serwerach nazw w końcu musisz podać .usługa. Na przykład:

systemctl enable nginx.service - polecenie doda serwer WWW nginx do automatycznego ładowania

To polecenie utworzy dowiązanie symboliczne do kopii pliku określonego w poleceniu service w katalogu autorun systemd.

# systemctl enable nginx.service

Utworzono dowiązanie symboliczne z /etc/systemd/system/multi-user.target.wants/nginx.service do /usr/lib/systemd/system/nginx.service
Dane wyjściowe tego polecenia pokazują, w którym katalogu utworzono dowiązanie symboliczne do pliku usługi.

Aby zobaczyć tę lub inną usługę dodaną do automatycznego ładowania, możesz sprawdzić jej status:

systemctl status nginx.service

Podczas generowania musisz zwrócić uwagę na linię:

Załadowano: załadowano (/usr/lib/systemd/system/nginx.service; włączone; wstępne ustawienie dostawcy: wyłączone)

Włączona wartość oznacza, że ​​ta usługa jest ładowana automatycznie (dodawana do autoload). Jeśli usługa nie ładuje się automatycznie, tutaj zostanie wskazane wyłączenie..

Usuwanie usługi z systemd

Możesz usunąć usługę ze startu, aby nie uruchamiała się po uruchomieniu Linuksa (podczas gdy sama usługa nie jest usuwana z serwera). Aby usunąć usługę z uruchamiania, uruchom polecenie:

systemctl wyłącz potrzebną usługę

Na przykład, aby usunąć nginx ze startu, wykonaj:

# systemctl wyłącz nginx.service

Usunięto symlink /etc/systemd/system/multi-user.target.wants/nginx.service

Po wykonaniu polecenia dowiązanie symboliczne do pliku usługi zostanie usunięte z katalogu systemd. Możesz sprawdzić, czy urządzenie jest w trakcie uruchamiania:

# systemctl jest włączony sshd

Systemd: maskowanie jednostek

W mojej praktyce istniały „szkodliwe” usługi, które po usunięciu ich ze startu nadal tam pozostały i uruchomiły się po ponownym uruchomieniu systemu operacyjnego. Aby rozwiązać ten problem, możesz zamaskować usługę:

systemctl mask nginx.service

A potem nie uruchomi się wcale, ani ręcznie, ani po ponownym uruchomieniu systemu operacyjnego:

# systemctl mask nginx.service

Utworzono dowiązanie symboliczne z /etc/systemd/system/nginx.service do / dev / null.

# service restart Nginx

Przekierowanie do / bin / systemctl restart nginx.service Ponowne uruchomienie nginx.service: Jednostka jest maskowana.

Możesz usunąć maskę za pomocą polecenia:

# systemctl zdemaskuj nginx.service

Usunięto symlink /etc/systemd/system/nginx.service.

Jeśli po zamaskowaniu usługi sprawdzisz pliki jednostek, zobaczysz, że usługa jest oznaczona jako zamaskowana (stan zamaskowany):

W tak prosty sposób możesz uratować się przed usunięciem usługi, nawet jeśli nie zostanie ona usunięta ze startu systemd.

Automatyczne uruchamianie skryptów i usług przy użyciu rc.local

Najczęściej jest używany do uruchamiania różnych skryptów podczas uruchamiania systemu Linux. rc.local.

Ale oprócz skryptów, przez rc.local możesz także uruchamiać usługi, nawet te, które działają systemd. Nie mogę odpowiedzieć na pytanie, po co korzystać w tym przypadku rc.local, jeśli jest systemd, ale podam kilka przykładów.

Na początek plik /etc/rc.local musi być wykonywalny:

chmod + x /etc/rc.local

Rc.local należy dodać do uruchamiania systemowego:

systemctl włącz rc-local

I na przykładzie tego samego nginx, możemy dodać rc.local polecenie uruchomienia serwera WWW:

usługa startu Nginx

Ale rzadko używam rc.local aby uruchomić usługi. Częściej rc.local używane, gdy trzeba uruchomić skrypt lub wykonać polecenie raz.

Na przykład stworzyłem skrypt /root/test.sh który wykonuje pewne działania i chcę go uruchomić natychmiast po uruchomieniu systemu. Dodaj linię do pliku rc.local:

sh /root/test.sh

Począwszy od CentOS 7, programiści zwracają na to uwagę rc.local przestarzały demon i automatyczne uruchamianie skryptów lub usług za jego pośrednictwem, to jest ostatni wiek. Ale chociaż działa, używam go, ponieważ jest bardzo łatwy w obsłudze.

Utwórz własnego demona i dodaj go do systemd

Możesz stworzyć własnego demona, którym można sterować systemd.

Na przykład musimy uruchomić ten sam skrypt /root/test.sh po ponownym uruchomieniu systemu. Zacznijmy od utworzenia pliku dla naszej przyszłej usługi:

dotknij /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

Zawartość pliku będzie następująca:

[Jednostka] Opis = Ustawienia szablonu Usługa After = sieć.target [Usługa] Typ = oneshot Użytkownik = root ExecStart = / root / test.sh [Zainstaluj] WantedBy = multi-user.target 

Kluczowe parametry:

Użytkownik - użytkownik, w ramach którego demon zostanie uruchomiony

Type = oneshot - proces zostanie zakończony przed uruchomieniem kolejnych jednostek

Sprawdź i uruchom ponownie:
# systemctl daemon-reload
# systemctl uruchom test-script.service
# systemctl status test-script.service

● test-script.service - Test załadowany: załadowany (/etc/systemd/system/test-script.service; wyłączony; preset dostawcy: wyłączony) Aktywny: aktywny (uruchomiony) 

Jeśli nie masz pewności, jak działa usługa, dodaj ją do automatycznego ładowania:

# systemctl enable test-script.service

Utworzono dowiązanie symboliczne z /etc/systemd/system/multi-user.target.wants/test-script.service do /etc/systemd/system/test-script.service.

W ten sposób możesz dodać dowolny skrypt do uruchamiania poprzez systemd.

Autostart przez cron

Jeśli chcesz uruchomić skrypt lub polecenie z pewną częstotliwością, możesz użyć cron-om:

crontab -e - otwórz terminal, aby napisać zadanie cron

I dodaj tam potrzebne zadanie, na przykład:

* * * * * /root/test.sh - uruchamiaj skrypt co minutę.

Możesz napisać skrypt pies stróżujący, który przy przydzieleniu sprawdzi na przykład status usługi, a jeśli nie zadziała, uruchom ją. W kilku moich projektach korzystam z podobnego schematu.

Aby wyświetlić listę wszystkich zadań w koronach, musisz uruchomić polecenie:

# crontab -l

* * * * * /root/test.sh

Prawidłowe wartości czasu rozpoczęcia zadań cron są uporządkowane:

  • Minuty od 0 do 59
  • Godziny od 0 do 59
  • Dzień miesiąca od 1 do 31
  • Od 1 do 12 miesiąca
  • Dzień tygodnia od 0 do 7 (0 lub 7 to niedziela)

W naszym zadaniu skrypt jest uruchamiany co minutę, więc są „*”.

Możesz także umieścić potrzebny skrypt w katalogach cron:

  • /cron.daily - codzienne wykonywanie skryptu
  • /cron.hourly - wykonywanie skryptu co godzinę
  • /cron.monthly - miesięczne wykonywanie skryptu
  • /cron.weekly - cotygodniowe wykonywanie skryptu

Skrypty w określonym katalogu będą uruchamiane zgodnie z automatycznie przygotowanym harmonogramem.

.bashrc: skrypty autostartu podczas uruchamiania terminalu

Jeśli musisz wykonać pewne czynności podczas uruchamiania terminalu ssh, możesz dodać dowolne polecenie lub wykonanie skryptu do .bash_profile lub .bashrc. Teoretycznie możesz dodać dowolną akcję do dowolnego z tych plików, i tak zostanie ona wykonana. Zwykle dodaje się wszystko, czego potrzebujesz .bashrc, i ja .bashrc zabrakło .bash_profile.

Dodałem do pliku .bashrc polecenie ponownego uruchomienia usługi sieci Web nginx:

usługa restartu Nginx

Następnie zapisałem plik i ponownie uruchomiłem terminal:

Jak widać, podczas uruchamiania terminala serwer WWW został zrestartowany. Jakie działania można wykonać podczas uruchamiania terminala? Prawdopodobnie uruchom niektóre narzędzia pomocnicze, na przykład sprawdzanie czas pracy serwer:

A może chcesz, aby po uruchomieniu terminalu od razu dostałeś się do potrzebnego katalogu i uruchom mc, dodaj do .bashrc

cd / var /
Mc

Mam nadzieję, że ten artykuł na temat zarządzania uruchamianiem usług i skryptów w LInux (artykuł został napisany dla CentOS) okazał się przydatny. Z pewnością ci, którzy uczą się tylko podstaw administracji systemem Linux, informacje te będą pomocne.