Systemd – jak wyświetlać usługi, zarządzać nimi i diagnozować problemy

Oskar Gajzler
Przez
Oskar Gajzler
Redaktor IINTE.edu.pl, na co dzień zajmuje się technologiami internetowymi i tłumaczeniem skomplikowanych tematów na prosty język. Pisze poradniki o tym, jak załatwiać sprawy przez internet, jak...
10 min czytania

1. Czym jest systemd i systemctl?

systemd to:

  • system init – uruchamia usługi podczas startu systemu;
  • menedżer usług – pilnuje ich stanu, restartuje je i kontroluje zależności;
  • framework dla logów (journald), timerów i punktów montowania.

Usługa w systemd to tzw. jednostka (unit) typu service (np. nginx.service, ssh.service).

Do pracy z jednostkami używa się polecenia:

systemctl

Uruchomienie samego systemctl bez opcji wyświetla listę aktywnych jednostek.

2. Podstawowe pojęcia i stany usług

Najważniejsze stany, które zobaczysz w systemd:

  • Active (running) – usługa działa;
  • Active (exited) – jednorazowy skrypt lub proces, który się zakończył;
  • Inactive – usługa zatrzymana;
  • Failed – usługa zakończyła się błędem.

Aby przejrzeć stan konkretnej usługi, użyj:

systemctl status nazwa_usługi

3. Jak wyświetlać usługi w systemd

3.1. Wszystkie jednostki typu „service”

Aby wyświetlić wszystkie jednostki usług (aktywne i zakończone), wpisz:

systemctl list-units --type=service

systemctl --type=service

Wynik zawiera m.in.:

  • nazwę usługi (UNIT),
  • jej stan (ACTIVE, SUB),
  • krótki opis (DESCRIPTION).

3.2. Tylko aktywne usługi

Jeśli interesują Cię wyłącznie usługi aktywne, wykonaj:

systemctl list-units --type=service --state=active

systemctl --type=service --state=active

3.3. Tylko uruchomione (running) usługi

Aby wyświetlić usługi działające w tej chwili, użyj:

systemctl list-units --type=service --state=running

systemctl --type=service --state=running

Przydatne np. gdy chcesz szybko sprawdzić, czy nginx, apache2 lub mysqld są uruchomione.

3.4. Wszystkie usługi, także nieaktywne

systemctl domyślnie nie pokazuje wszystkich plików jednostek. Aby zobaczyć pełną listę plików jednostek typu service, skorzystaj z:

systemctl list-unit-files --type=service

W kolumnach zobaczysz również stan: enabled, disabled, static itd.

3.5. Filtracja po nazwie

Aby znaleźć konkretną usługę i szybko sprawdzić jej status, użyj:

systemctl list-units --type=service | grep nginx

systemctl status nginx

4. Jak zarządzać usługami (start/stop/restart/autostart)

Podstawowe operacje na usługach wykonasz poleceniem systemctl z odpowiednią akcją:

4.1. Uruchamianie i zatrzymywanie usług

Najczęściej używane polecenia wyglądają tak:

sudo systemctl start nazwa_usługi.service

sudo systemctl stop nazwa_usługi.service

sudo systemctl restart nazwa_usługi.service

sudo systemctl status nazwa_usługi.service

Rozszerzenie .service można zwykle pominąć:

sudo systemctl start nginx

sudo systemctl stop nginx

sudo systemctl restart nginx

sudo systemctl status nginx

  • Start – uruchamia usługę teraz (nie zmienia ustawień autostartu);
  • Stop – zatrzymuje usługę;
  • Restart – zatrzymuje i uruchamia ponownie (przydatne po zmianie konfiguracji);
  • Status – pokazuje stan, ostatnie logi i PID procesu.

4.2. Włączanie/wyłączanie autostartu (enable/disable)

Aby usługa startowała automatycznie przy uruchamianiu systemu, wykonaj:

sudo systemctl enable nazwa_usługi

Aby zatrzymać autostart, użyj:

sudo systemctl disable nazwa_usługi

Połącz autostart z natychmiastowym uruchomieniem lub zatrzymaniem poleceniem:

sudo systemctl enable --now nazwa_usługi

sudo systemctl disable --now nazwa_usługi

4.3. Różnica: start vs enable

  • start – działa do najbliższego restartu;
  • enable – tworzy powiązania (np. w multi-user.target.wants), dzięki czemu usługa uruchamia się przy starcie systemu;
  • praktyka – dla usług serwerowych najczęściej używaj enable --now.

5. Jak sprawdzać szczegółowy stan usługi

5.1. systemctl status

Do szybkiej diagnostyki stanu i logów użyj:

systemctl status nazwa_usługi

Komenda wyświetla m.in.:

  • czy usługa jest loaded/enabled,
  • czy jest active (running) lub failed,
  • główny PID procesu,
  • ostatnie logi z journalctl.

Przykład dla SSH:

systemctl status ssh

5.2. Zależności usług

Aby sprawdzić zależności usługi oraz jednostki od niej zależne, wpisz:

systemctl list-dependencies nazwa_usługi

5.3. Szczegółowe parametry usługi

Pełny podgląd parametrów znanych systemd o danej usłudze uzyskasz poleceniem:

systemctl show nazwa_usługi

Zobaczysz m.in. ścieżkę do pliku jednostki (FragmentPath), polecenie uruchamiające, limity zasobów oraz środowisko uruchomieniowe.

6. Diagnozowanie problemów z usługami (journalctl, failed units)

6.1. Wyszukiwanie usług w stanie failed

Aby zobaczyć jednostki zakończone błędem, użyj:

systemctl --failed

To pierwszy krok, gdy po restarcie „coś nie działa”.

6.2. Podstawowe użycie journalctl

Systemd używa własnego systemu logów – journald. Najważniejsze opcje to:

  • od ostatniego rozruchu – użyj journalctl -b;
  • tylko dla konkretnej usługi – journalctl -u nazwa_usługi lub journalctl -u nazwa_usługi -b;
  • od konkretnego momentu – journalctl --since="2024-01-01 00:00" albo journalctl --since="10 minutes ago";
  • do konkretnego momentu – journalctl --until="2024-01-01 23:59";
  • ciągłe śledzenie logów – journalctl -u nazwa_usługi -f;
  • szczegółowe formatowanie – journalctl -o verbose;
  • logi konkretnego procesu po PID – journalctl _PID=1234.

6.3. Sprawdzanie rozmiaru logów journald

Aby sprawdzić, ile miejsca zajmują logi systemd, wpisz:

journalctl --disk-usage

Jeśli katalog /var/log/journal nie istnieje, journald zwykle loguje w trybie volatile i logi znikają po restarcie.

6.4. Typowy workflow diagnostyczny

  1. Sprawdź status usługi: systemctl status nazwa_usługi.
  2. Jeśli jest failed, przejrzyj logi: journalctl -u nazwa_usługi -b.
  3. Jeśli potrzebujesz logów z chwili awarii: journalctl -u nazwa_usługi --since="30 minutes ago".
  4. Wprowadź poprawki i zrestartuj usługę: sudo systemctl restart nazwa_usługi.

7. Tworzenie, edycja i usuwanie usług systemd

7.1. Gdzie znajdują się pliki usług?

Typowe lokalizacje to /lib/systemd/system/ (pliki jednostek z pakietów systemowych) oraz /etc/systemd/system/ (jednostki tworzone lub nadpisywane przez administratora). Pliki mają rozszerzenie .service, np. myapp.service.

7.2. Podgląd ścieżki pliku usługi

Aby znaleźć plik konkretnej usługi, wyświetl jej status i odczytaj sekcję Loaded:

systemctl status nazwa_usługi

7.3. Usuwanie własnej usługi systemd

Jeśli dodałeś własny plik usługi i chcesz go usunąć, postępuj w tej kolejności:

  1. Zatrzymaj usługę – sudo systemctl stop your_service_name.service.
  2. Wyłącz autostart – sudo systemctl disable your_service_name.service.
  3. Usuń plik usługi z /etc/systemd/system/ – sudo rm /etc/systemd/system/your_service_name.service.
  4. Przeładuj konfigurację systemd – sudo systemctl daemon-reload.
  5. Zweryfikuj, że usługi już nie ma – systemctl list-units --type=service | grep your_service_name.

8. Systemd w środowisku WSL (Windows Subsystem for Linux)

Jeżeli korzystasz z Linuksa w WSL na Windows, w nowszych wersjach możesz włączyć systemd dla swojej dystrybucji (np. Ubuntu, Debian, Kali). Wykonaj poniższe kroki:

  1. Otwórz powłokę dystrybucji i przejdź do katalogu głównego: cd /.
  2. Edytuj plik konfiguracji: sudo nano /etc/wsl.conf.
  3. Dodaj sekcję uruchamiania systemd: [boot] oraz systemd=true.
  4. Zapisz plik i w PowerShell zamknij WSL: wsl.exe --shutdown.
  5. Po ponownym uruchomieniu dystrybucji sprawdź status: systemctl status, a także listę usług: systemctl list-unit-files --type=service.

Na Debian/Ubuntu/Kali upewnij się, że masz zainstalowane pakiety systemd:

sudo apt-get update -y && sudo apt-get install systemd systemd-sysv -y

9. Alias i skróty ułatwiające pracę z usługami

Aby szybciej wyświetlać tylko uruchomione usługi, dodaj alias do pliku powłoki i załaduj go ponownie:

echo "alias running_services='systemctl list-units --type=service --state=running'" >> ~/.bashrc

source ~/.bashrc

Możesz dodać także inne przydatne aliasy:

  • alias sst='systemctl status',
  • alias sj='journalctl -u',
  • alias sfa='systemctl --failed'.

Następnie wygodnie uruchamiaj polecenia, np.: sst nginx, sj nginx -b.

10. Systemd vs. stare polecenia service

W starszych poradnikach nadal można spotkać polecenia w formie sudo service nazwa_usługi start/stop/restart/status. Na dystrybucjach z systemd są one z reguły nakładką na systemctl, jednak zalecane jest bezpośrednie korzystanie z systemctl, które zapewnia pełny dostęp do funkcji systemd (np. enable/disable, list-units, journalctl).

11. Praktyczne przykłady dla usług sieciowych

11.1. Sprawdzenie, czy serwer WWW działa (nginx/apache2)

Aby sprawdzić stan serwera WWW, użyj: systemctl status nginx lub systemctl status apache2.

Jeżeli usługa jest inactive lub failed, uruchom: sudo systemctl start nginx. Aby włączyć autostart, dodaj: sudo systemctl enable nginx.

Debugowanie błędów ułatwi: journalctl -u nginx -b.

11.2. Sprawdzenie usług bazodanowych (MySQL/MariaDB/PostgreSQL)

Sprawdź status: systemctl status mariadb, systemctl status mysql, systemctl status postgresql.

Ponowne uruchomienie po zmianie konfiguracji: sudo systemctl restart mariadb, sudo systemctl restart postgresql.

12. Narzędzia systemd do analizy czasu startu systemu

Całkowity czas startu systemu sprawdzisz poleceniem: systemd-analyze time.

Które jednostki startują najdłużej sprawdzisz poleceniem: systemd-analyze blame.

To szczególnie ważne, gdy serwer (np. hosting WWW) startuje zbyt długo – zobaczysz, które usługi opóźniają boot.

13. Bezpieczne podejście administracyjne – „checklista”

Dla administratora serwera WWW/VPS przy pracy z usługami w systemd przyda się prosta checklista:

  1. Chcesz zobaczyć, co działa? Użyj: systemctl --type=service --state=running.
  2. Chcesz włączyć usługę przy starcie i od razu uruchomić? Wpisz: sudo systemctl enable --now nazwa_usługi.
  3. Usługa nie działa lub padła? Sprawdź: systemctl status nazwa_usługi, systemctl --failed, journalctl -u nazwa_usługi -b.
  4. Zmieniłeś konfigurację usługi? Zastosuj restart: sudo systemctl restart nazwa_usługi.
  5. Usługa jest niepotrzebna (np. własny daemon)? Zatrzymaj, wyłącz autostart, usuń plik .service i wykonaj daemon-reload.
Udostępnij ten artykuł
Obserwuj
Redaktor IINTE.edu.pl, na co dzień zajmuje się technologiami internetowymi i tłumaczeniem skomplikowanych tematów na prosty język. Pisze poradniki o tym, jak załatwiać sprawy przez internet, jak bezpiecznie korzystać z sieci i jak dobierać sprzęt oraz oprogramowanie. Prywatnie tropi nowinki technologiczne i testuje je, zanim opisze.
Brak komentarzy

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *