Przejdź do treści

Przydatne polecenia systemd w codziennej pracy

O artykule

To kontynuacja serii o systemd. W tym artykule skupiam się na praktycznych poleceniach, które przydają się w codziennej pracy admina.

Podstawowe zarządzanie usługami

Uruchamianie, zatrzymywanie i restart usług

Uruchomienie usługi

systemctl start nazwa

Zatrzymanie usługi

systemctl stop nazwa

Restart usługi

systemctl restart nazwa

Przeładowanie konfiguracji bez restartu usługi

systemctl reload nazwa

Restart tylko gdy usługa jest aktywna

systemctl try-restart nazwa

Restart lub start jeśli usługa nie działa

systemctl restart-or-start nazwa

Sprawdzanie statusu usług

Podstawowy status usługi

systemctl status nazwa

Sprawdzenie czy usługa jest aktywna

systemctl is-active nazwa

Sprawdzenie czy usługa jest włączona (autostart)

systemctl is-enabled nazwa

Sprawdzenie czy usługa się nie zawiesiła

systemctl is-failed nazwa

Status wszystkich usług

systemctl list-units --type=service --all

Konfiguracja autostartu

Włączenie usługi do autostartu

systemctl enable nazwa

Włączenie usługi i uruchomienie

systemctl enable --now nazwa

Wyłączenie usługi z autostartu

systemctl disable nazwa

Wyłączenie z autostartu i zatrzymanie

systemctl disable --now nazwa

Włączenie usługi tylko dla aktualnego uruchomienia systemu

systemctl enable --runtime nazwa

Monitorowanie systemu

Analiza logów systemowych

Wyświetlenie dziennika dla konkretnej usługi

journalctl -u nazwa

Wyświetlenie z bieżącego boota

```bash journalctl -b

Wyświetlenie z poprzedniego boota

```bash
journalctl -b -1

Ciągłe wyświetlanie nowych wpisów w logu

journalctl -f

Wyświetlenie tylko błędów i ostrzeżeń

journalctl -p err..warning

Logi z ostatnich 24 godzin

journalctl --since "24 hours ago"

logi od konkretnej daty/czasu

journalctl --since "2023-05-01 12:00:00" --until "2023-05-02 12:00:00"

Pokaż wykorzystanie miejsca przez logi

journalctl --disk-usage

Wyczyść dzienniki starsze niż X dni

journalctl --vacuum-time=7d

Ogranicz rozmiar dzienników do 500MB

journalctl --vacuum-size=500M

Zaawansowane filtrowanie logów

Logi dla konkretnego PID

journalctl _PID=1234

Logi dla konkretnego użytkownika

journalctl _UID=1000

Logi dla konkretnej ścieżki wykonania

journalctl _EXE=/usr/bin/httpd

Logi dla konkretnego hosta w środowisku kontenerów

journalctl _HOSTNAME=kontener1

Eksport logów do formatu JSON

journalctl -u nazwa -o json

Eksport dzienników do pliku

journalctl -u nazwa --since today > nazwa.log

Zarządzanie usługami sieciowymi

Status sieciowy konkretnego interfejsu

networkctl status eth0

Lista wszystkich interfejsów sieciowych

networkctl list

Restart konfiguracji sieciowej (o ile jest aktywna)

systemctl restart systemd-networkd

Diagnostyka usług sieciowych

networkctl lldp

Zaawansowane opcje sieciowe

Zarządzanie usługą DNS

systemctl restart systemd-resolved
Sprawdzenie konfiguracji DNS

resolvectl status

Czyszczenie cache DNS

resolvectl flush-caches

Sprawdzenie statystyk cache DNS

resolvectl statistics

Zarządzanie konfiguracjami usług

Edycja pliku konfiguracyjnego usługi

systemctl edit nazwa

Tworzenie nadpisania konfiguracji

systemctl edit --full nazwa

Sprawdzenie lokalizacji pliku usługi

systemctl show -p FragmentPath nazwa

Przeładowanie wszystkich plików jednostek

systemctl daemon-reload

Sprawdzenie własności jednostki

systemctl show nazwa

Podgląd konfiguracji

Wyświetlenie pliku usługi

systemctl cat nazwa

Wyświetlenie zależności usługi

systemctl list-dependencies nazwa

Wyświetlenie właściwości usługi

systemctl show nazwa

Wyświetlenie konkretnej właściwości

systemctl show -p MainPID nazwa

Analiza czasowa systemd

Czas startu systemu

systemd-analyze

Najdłużej startujące usługi

systemd-analyze blame

Ścieżka bootowania

systemd-analyze critical-chain

Generowanie wykresu czasu bootowania

systemd-analyze plot > boot-chart.svg

Analiza wszystkich zależności usług

systemctl list-dependencies --all

Zarządzanie kontenerami i maszynami wirtualnymi

Lista wszystkich kontenerów

machinectl list

Uruchomienie powłoki w kontenerze

machinectl shell nazwa_kontenera

Uruchomienie powłoki jako konkretny użytkownik w kontenerze

machinectl shell uzytkownik@nazwa_kontenera

Restart kontenera

machinectl reboot nazwa_kontenera

Zatrzymanie kontenera

machinectl poweroff nazwa_kontenera

Status kontenera

machinectl status nazwa_kontenera

Nspawn - lekkie kontenery

Uruchomienie kontenera z konkretnym katalogiem jako rootfs

systemd-nspawn -D /ścieżka/do/rootfs

Uruchomienie kontenera z obrazu

systemd-nspawn -i obraz.raw

Uruchomienie kontenera z siecią

systemd-nspawn --network-bridge=br0 -D /ścieżka/do/rootfs

Zarządzanie zasilaniem

Wyłączenie systemu

systemctl poweroff

Restart systemu

systemctl reboot

Wstrzymanie systemu (suspend)

systemctl suspend

Hibernacja

systemctl hibernate

Tryb hybrydowy (suspend-then-hibernate)

systemctl hybrid-sleep

Zaplanowanie wyłączenia

systemctl poweroff --force --force

Anulowanie zaplanowanego wyłączenia

systemctl cancel

Status zaplanowanych zadań

systemctl list-jobs

Zarządzanie zasobami

Sprawdzenie limitów pamięci

systemctl show -p MemoryLimit nazwa

Sprawdzenie limitów CPU

systemctl show -p CPUQuota nazwa

Sprawdzenie limitów I/O

systemctl show -p IOWeight nazwa

Ustawienie limitu pamięci dla usługi

systemctl set-property nazwa MemoryMax=1G

Ustawienie priorytetu CPU dla usługi

systemctl set-property nazwa CPUWeight=800

Ustawienie limitu TasksMax dla usługi

systemctl set-property nazwa TasksMax=100

Automatyzacja systemd

Generowanie zależności

Automatyczne generowanie zależności dla usługi

systemctl add-wants target.nazwa nazwa

Usunięcie automatycznej zależności

systemctl remove-wants target.nazwa nazwa

Polecenia automatyzujące

Kaskadowy restart usług (wszystkie zależne)

systemctl restart --all nazwa

Wymuszone ponowne załadowanie wszystkich usług

systemctl daemon-reexec

Wygenerowanie raportu stanu systemu

systemd-analyze dump > raport_systemd.txt

Lokalizacja ważnych plików konfiguracyjnych

Ścieżka Opis
/etc/systemd/system/ Pliki jednostek zdefiniowane przez administratora
/run/systemd/system/ Pliki jednostek wygenerowane w czasie działania systemu
/lib/systemd/system/ Pliki jednostek dostarczone przez pakiety systemowe
/etc/systemd/system.conf Globalna konfiguracja systemd
/etc/systemd/user.conf Globalna konfiguracja dla sesji użytkownika
/etc/systemd/journald.conf Konfiguracja systemu logowania
/etc/systemd/logind.conf Konfiguracja zarządzania sesjami
/etc/systemd/networkd.conf Konfiguracja zarządzania siecią
/etc/systemd/resolved.conf Konfiguracja usługi DNS

Wskazówki dla zaawansowanych

  • Aby sprawdzić spójność konfiguracji systemd: systemd-analyze verify nazwa.service
  • wyczyścić stary cache systemd: rm -rf /var/lib/systemd/catalog/database
  • sprawdzić uszkodzone jednostki: systemctl --failed --all
  • ustawić domyślny target: systemctl set-default multi-user.target
  • tymczasowo wystartować z innym targetem: systemctl isolate rescue.target

Wskazówka

Stwórz własne aliasy dla często używanych poleceń systemd w swoim pliku .bashrc:

alias scs='systemctl status'
alias scr='systemctl restart'
alias jf='journalctl -f'
alias jfu='journalctl -fu'

To tylko część przydatnych poleceń. Systemd to bogate narzędzie, które oferuje wiele funkcjonalności.