15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
31.10.2024

Polecenia Systemctl: Jak Restartować, Przeładowywać i Zatrzymywać Usługi w Linux

Efektywne zarządzanie usługami to jedna z najważniejszych umiejętności dla każdego administratora systemu Linux. Niezależnie od tego, czy uruchamiasz serwer WWW o wysokim ruchu na planie VPS Hosting czy utrzymujesz środowisko Dedicated Server, zrozumienie sposobu kontrolowania usług systemowych za pomocą systemctl jest absolutnie niezbędne. Ten kompleksowy przewodnik obejmuje wszystko, co musisz wiedzieć o restartowaniu, przeładowywaniu i zatrzymywaniu usług w systemie Linux za pomocą systemd i systemctl.

Co to jest systemd i dlaczego ma znaczenie?

systemd to domyślny system init i menedżer usług używany w praktycznie wszystkich nowoczesnych dystrybucjach Linux, w tym Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux i Fedora. Zastąpił starsze systemy init, takie jak SysVinit i Upstart, przynosząc znaczące ulepszenia w sposobie uruchamiania i zarządzania procesami w systemie Linux.

Kluczowe cechy systemd

  • Równoległy startup usług — Dramatycznie skraca czasy uruchamiania poprzez jednoczesne uruchamianie usług
  • Aktywacja usług na żądanie — Usługi mogą być uruchamiane tylko w razie potrzeby, oszczędzając zasoby systemowe
  • Zarządzanie zależnościami — Automatycznie obsługuje zależności i kolejność usług
  • Scentralizowane logowanie — Integruje się z journald w celu ujednoliconego, strukturalnego zarządzania dziennikami
  • Kontrola zasobów oparta na Cgroup — Śledzi i ogranicza użycie CPU, pamięci i I/O na usługę
  • Aktywacja Socket i D-Bus — Umożliwia zaawansowane wzorce komunikacji między procesami

Zrozumienie systemd to nie tylko kwestia akademicka — bezpośrednio wpływa na stabilność, wydajność i bezpieczeństwo Twojego środowiska Linux.

Co to jest systemctl?

systemctl to główny interfejs wiersza poleceń do interakcji z systemd. Umożliwia administratorom:

  • Uruchamianie, zatrzymywanie, restartowanie i przeładowywanie usług
  • Włączanie lub wyłączanie usług przy uruchamianiu
  • Sprawdzanie statusu usługi i wyświetlanie dzienników
  • Zarządzanie celami systemowymi (runlevels)
  • Przeładowywanie konfiguracji demona systemd

Wszystkie polecenia systemctl, które modyfikują stan systemu, wymagają uprawnień root lub dostępu sudo.

Podstawowe polecenia systemctl do zarządzania usługami

1. Restartowanie usługi

Restartowanie usługi całkowicie ją zatrzymuje, a następnie uruchamia od nowa. To jest główna operacja, gdy:

  • Dokonałeś zmian konfiguracji wymagających pełnego restartu procesu
  • Usługa uległa awarii lub stała się nieresponsywna
  • Musisz zastosować zaktualizowane pliki binarne po aktualizacji pakietu

Składnia:

sudo systemctl restart <service_name>

Przykład — Restartuj serwer WWW Nginx:

sudo systemctl restart nginx

Przykład — Restartuj serwer WWW Apache:

sudo systemctl restart apache2

Przykład — Restartuj bazę danych MySQL/MariaDB:

sudo systemctl restart mysql

> Ważne: Restartowanie usługi powoduje krótką przerwę. W środowiskach produkcyjnych rozważ użycie reload jeśli jest obsługiwane, aby uniknąć przestojów.

2. Przeładowywanie usługi

Przeładowywanie instruuje uruchomioną usługę, aby ponownie przeczytała swoje pliki konfiguracyjne bez zatrzymywania procesu. Jest to idealne do stosowania zmian konfiguracji bez żadnych przestojów.

Składnia:

sudo systemctl reload <service_name>

Przykład — Przeładuj Nginx po edycji jego konfiguracji:

sudo systemctl reload nginx

Przykład — Przeładuj demon SSH po zmodyfikowaniu sshd_config:

sudo systemctl reload sshd

> Uwaga: Nie wszystkie usługi obsługują operację reload. Jeśli usługa jej nie implementuje, systemctl zwróci błąd. W takich przypadkach użyj restart.

Porada — Użyj reload-or-restart dla maksymalnej kompatybilności:

sudo systemctl reload-or-restart <service_name>

To polecenie najpierw próbuje przeładować. Jeśli usługa nie obsługuje przeładowania, automatycznie wraca do pełnego restartu — co czyni go najbezpieczniejszą opcją dla wdrożeń skryptowych i automatyzacji.

3. Zatrzymywanie usługi

Zatrzymanie usługi kończy ją natychmiast. Użyj tego, gdy musisz wziąć usługę offline do konserwacji, rozwiązywania problemów lub rekonfiguracji.

Składnia:

sudo systemctl stop <service_name>

Przykład — Zatrzymaj serwer WWW Nginx:

sudo systemctl stop nginx

Przykład — Zatrzymaj usługę zapory:

sudo systemctl stop ufw

> Ostrzeżenie: Zatrzymanie krytycznej usługi (takiej jak sshd na serwerze zdalnym) może Cię zablokować w systemie. Zawsze upewnij się, że masz alternatywną metodę dostępu, taką jak konsola lub zarządzanie out-of-band, przed zatrzymaniem niezbędnych usług.

4. Uruchamianie usługi

Jeśli usługa nie jest aktualnie uruchomiona, użyj polecenia start do jej uruchomienia.

Składnia:

sudo systemctl start <service_name>

Przykład:

sudo systemctl start nginx

5. Włączanie usługi przy uruchamianiu

Włączenie usługi tworzy niezbędne dowiązania symboliczne, aby systemd automatycznie ją uruchamiał podczas uruchamiania systemu.

Składnia:

sudo systemctl enable <service_name>

Przykład:

sudo systemctl enable nginx

Włącz i uruchom jednocześnie (zalecane):

sudo systemctl enable --now nginx

6. Wyłączanie usługi przy uruchamianiu

Wyłączenie usługi uniemożliwia jej automatyczne uruchomienie, ale nie zatrzymuje jej, jeśli jest aktualnie uruchomiona.

Składnia:

sudo systemctl disable <service_name>

Przykład:

sudo systemctl disable bluetooth

Wyłącz i zatrzymaj jednocześnie:

sudo systemctl disable --now bluetooth

7. Sprawdzanie statusu usługi

Polecenie status to jedno z najczęściej używanych poleceń systemctl. Zapewnia migawkę stanu usługi w czasie rzeczywistym, w tym ostatnie wpisy dziennika.

Składnia:

sudo systemctl status <service_name>

Przykład — Sprawdź status Nginx:

sudo systemctl status nginx

Przykładowe wyjście:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-01-15 10:23:45 UTC; 2h 34min ago
       Docs: man:nginx(8)
    Process: 1234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 1235 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 6.2M
        CPU: 45ms
     CGroup: /system.slice/nginx.service
             ├─1235 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─1236 "nginx: worker process"

Wyjście zawiera:

  • Loaded — Czy plik jednostki jest załadowany i czy jest włączony przy uruchamianiu
  • Active — Bieżący stan uruchomienia (active (running), inactive (dead), failed, itp.)
  • Main PID — Główny identyfikator procesu usługi
  • Memory/CPU — Metryki zużycia zasobów
  • CGroup — Hierarchia grupy kontrolnej
  • Recent logs — Ostatnie wpisy dziennika dla szybkiej diagnostyki

Zaawansowane polecenia systemctl

Sprawdzanie, czy usługa jest aktywna lub włączona

Do użytku w skryptach i automatyzacji, te polecenia zwracają proste kody wyjścia w stylu logicznym:

# Check if a service is currently running
systemctl is-active nginx

# Check if a service is enabled at boot
systemctl is-enabled nginx

# Check if a service has failed
systemctl is-failed nginx

Wyświetlanie listy wszystkich usług

# List all loaded and active units
systemctl list-units --type=service

# List all installed unit files and their states
systemctl list-unit-files --type=service

# List only failed services
systemctl --failed

Przeładowywanie demona systemd

Po utworzeniu lub zmodyfikowaniu plików jednostek musisz przeładować demon systemd, aby rozpoznał zmiany:

sudo systemctl daemon-reload

Maskowanie i odmaskowanie usługi

Maskowanie usługi uniemożliwia jej uruchomienie ręcznie lub automatycznie — nawet przez inne usługi:

# Prevent a service from ever starting
sudo systemctl mask <service_name>

# Re-enable a masked service
sudo systemctl unmask <service_name>

Szybka referencja: Ściągawka poleceń systemctl

PolecenieOpis
systemctl start <service>Uruchom zatrzymaną usługę
systemctl stop <service>Zatrzymaj uruchomioną usługę
systemctl restart <service>Zatrzymaj i restartuj usługę
systemctl reload <service>Przeładuj konfigurację bez zatrzymywania
systemctl reload-or-restart <service>Przeładuj jeśli obsługiwane, w przeciwnym razie restartuj
systemctl enable <service>Włącz usługę przy uruchamianiu
systemctl disable <service>Wyłącz usługę przy uruchamianiu
systemctl enable --now <service>Włącz i uruchom natychmiast
systemctl disable --now <service>Wyłącz i zatrzymaj natychmiast
systemctl status <service>Pokaż status usługi i dzienniki
systemctl is-active <service>Sprawdź, czy usługa jest uruchomiona
systemctl is-enabled <service>Sprawdź, czy usługa uruchamia się przy uruchamianiu
systemctl is-failed <service>Sprawdź, czy usługa nie powiodła się
systemctl list-units --type=serviceWyświetl listę wszystkich aktywnych usług
systemctl --failedWyświetl listę wszystkich usług, które nie powiodły się
systemctl daemon-reloadPrzeładuj pliki jednostek systemd
systemctl mask <service>Całkowicie uniemożliwić uruchomienie usługi
systemctl unmask <service>Usuń maskę z usługi

Praktyczne przypadki użycia dla administratorów serwerów

Scenariusz 1: Stosowanie zmian konfiguracji Nginx

Edytowałeś /etc/nginx/nginx.conf na serwerze WWW. Aby zastosować zmiany bez przerywania aktywnych połączeń:

# First, test the configuration syntax
sudo nginx -t

# If the test passes, reload gracefully
sudo systemctl reload nginx

Scenariusz 2: Odzyskiwanie usługi, która uległa awarii

Usługa uległa awarii i pokazuje stan failed:

# Check what went wrong
sudo systemctl status myapp.service

# View full logs for the service
sudo journalctl -u myapp.service -n 50 --no-pager

# Restart the service
sudo systemctl restart myapp.service

Scenariusz 3: Konfiguracja nowej usługi po wdrożeniu

Po wdrożeniu nowej aplikacji z niestandardowym plikiem jednostki:

# Reload systemd to recognize the new unit file
sudo systemctl daemon-reload

# Enable and start the service in one command
sudo systemctl enable --now myapp.service

# Verify it's running correctly
sudo systemctl status myapp.service

Różnica między restart, reload i stop — Na pierwszy rzut oka

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij