Jak tworzyć i uruchamiać nowe jednostki serwisowe w Systemd za pomocą skryptu powłoki

Jak tworzyć i uruchamiać nowe jednostki serwisowe w Systemd za pomocą skryptu powłoki

Kilka dni temu natknąłem się na Centos 7 32-bitowa dystrybucja i poczułem chęć przetestowania go na starej 32-bitowej maszynie. Po uruchomieniu zdałem sobie sprawę, że ma błąd i tracił połączenie sieciowe, które musiałem to obrócić "w górę" ręcznie za każdym razem po rozruchu. Pytanie brzmiało, w jaki sposób mogłem ustawić scenariusz do tego zadania, działając za każdym razem, gdy uruchamiam komputer?

Cóż, jest to bardzo proste i pokażę Ci system SystemD za pomocą jednostek serwisowych. Ale najpierw małe wprowadzenie do jednostek serwisowych.

W tym artykule wyjaśnię, co „Jednostka serwisowa” W systemie jest to, jak łatwo jest utworzyć i uruchomić jeden. Spróbuję uprościć co „Cele” są, dlaczego do nich nazywamy „Kolekcje jednostek” A jakie są ich „Chce”. Wreszcie korzystamy z jednostki serwisowej, aby uruchomić własny skrypt po procedurze rozruchu.

Oczywiste jest, że Twój komputer jest przydatny ze względu na oferowane usługi, a aby mieć tę funkcjonalność, wiele usług należy wywołać jako buty komputerowe i osiąga różne poziomy. Inne usługi są powołane do wykonania, gdy komputer osiągnie, na przykład poziom ratunkowy (RunLevel 0) i inne, gdy osiągnie poziom wielu użytkowników (RunLevel 3). Możesz sobie wyobrazić te poziomy jako cele.

W prosty sposób jest zbiorem jednostek serwisowych. Jeśli chcesz przyjrzeć się jednostkom serwisowym działającym w Twoim graficzny.cel Poziom, Typ:

# Systemctl --Type = serwis 
Wymień wszystkie jednostki serwisowe w Centos 7

Jak widać, niektóre usługi są aktywne i "działanie" Cały czas, podczas gdy inni działają jednorazowo i kończą (wychodzą). Jeśli chcesz sprawdzić status usługi, wpisz:

# Systemctl Statl Firewalld.praca 
Sprawdź status usług w Centos 7

Jak widać, sprawdziłem status Firewalld.praca (wskazówka: możesz użyć automatycznego kompletu dla nazwy usługi). To mnie informuje Firewalld usługa działa cały czas i jest włączona.

Nie przegap: Jak skonfigurować usługę zapory w Centos 7

Włączone i wyłączone oznacza, że ​​usługa zostanie na stałe załadowana lub nie, odpowiednio podczas następnego rozruchu. Z drugiej strony, aby rozpocząć i zatrzymać usługę, ma ograniczenie niniejszej sesji i nie jest to trwałe.

Na przykład, jeśli wpiszesz:

# Systemctl Stop Firewalld.Service # Systemctl Status Firewalld.praca 
Zarządzaj usługami w Centos 7

Możesz zobaczyć, że Firewalld.praca jest nieaktywny (martwy), ale jest nadal włączony, co oznacza, że ​​podczas następnego rozruchu zostanie załadowany. Więc jeśli chcemy, aby usługa została załadowana w czasie rozruchu w przyszłości. Co za wielki wniosek! Utwórzmy jeden, to łatwe.

Jeśli przejdziesz do folderu:

# cd/etc/systemd/system # ls -l 
Pliki systemowe systemu

Możesz zobaczyć niektóre pliki linków usług jednostkowych i niektóre katalogi „Chce” celu. Na przykład: To, co cel wielu użytkowników chce zostać załadowany, gdy procedura rozruchu osiągnie swój poziom, jest wymieniony w katalogu pod nazwą /etc/systemd/system/multi-użytkownik.cel.chce/.

# LS Multi-User.cel.chce/ 
Multi User Celuje Usługi

Jak widać usługi ale także inne cele które są również kolekcjami usług.

Zróbmy jednostkę serwisową o nazwie połączenie.praca.

# połączenie vim.praca 

i wpisz następujące (hit "I" dla trybu wstawiania), zapisz go i wyjdź (z "wyjście" I „: WQ!" ):

[Jednostka] Opis = Wykonanie połączenia sieciowego po = sieć.Target [Service] ExecStart =/root/Scripts/Conup.sh [instalacja] WantedBy = Multi-użytkownik.cel 
Utwórz nowe jednostki serwisowe w Centos 7

Aby wyjaśnić powyższe: utworzyliśmy jednostkę typu usługi (możesz również utworzyć jednostki typu docelowego), ustawiliśmy ją na załadowanie po załadowaniu sieć.cel (Możesz zrozumieć, że procedura uruchamiania osiąga cele z zdefiniowaną kolejnością) i chcemy, aby usługa zaczyna wykonywać skrypt bash o nazwie Conup.cii które zamierzamy stworzyć.

Zabawa zaczyna się od ostatniej części [zainstalować]. Mówi, że będzie to poszukiwane przez „Multi-użytkownik.cel". Więc jeśli włączymy naszą usługę, symboliczny link do tej usługi zostanie utworzony w środku Multi-użytkownik.cel.chce teczka! Rozumiem? A jeśli wyłączymy, że link zostanie usunięty. Tak prosty.

Po prostu włącz to i sprawdź:

# Systemctl Włącz połączenie.praca 

informuje nas, że symboliczny link w Multi-użytkownik.cel.chce Utworzono folder. Sprawdź to:

# LS Multi-User.cel.chce/ 
Włącz usługę w Centos 7

Jak widzisz "połączenie.praca" jest gotowy do następnego uruchamiania, ale musimy najpierw utworzyć plik skryptu.

# cd /root # mkdir Scripts # Scripts CD # vim conup.cii 

Dodaj następującą linię w środku krzepa I zapisz to:

#!/BIN/BASH NMCLI Połączenie UP ENP0S3 

Oczywiście, jeśli chcesz, aby Twój skrypt wykonał coś innego, możesz wpisać wszystko, co chcesz.

Na przykład,

#!/bin/bash touch/tmp/testbootfile 

To utworzyłoby plik w środku /TMP folder (tylko aby sprawdzić, czy Twoja usługa działa).

Musimy również uczynić skrypt wykonywalny:

# chmod +x conup.cii 

Teraz jesteśmy gotowi. Jeśli nie chcesz czekać do następnego rozruchu (jest już włączony), możemy rozpocząć usługę bieżącego pisania sesji:

# SystemCtl Rozpocznij połączenie.praca 

Voila! Moje połączenie jest uruchomione!

Jeśli zdecydowałeś się napisać polecenie „Touch /TMP /Testbootfile” Wewnątrz skryptu, aby sprawdzić jego funkcjonalność, zobaczysz ten plik utworzony w środku /TMP teczka.

Potwierdź status usługi

Naprawdę mam nadzieję, że pomogę ci dowiedzieć się, jakie usługi, cele, cele i uruchamianie scenariuszy podczas uruchamiania są.