systemd od podstaw do zaawansowanych zastosowań – jak działa współczesny system inicjalizacji Linux
Linux

Systemd od podstaw do zaawansowanych zastosowań – jak działa współczesny system inicjalizacji Linux

systemd od podstaw do zaawansowanych zastosowań – jak działa współczesny system inicjalizacji Linux

Przez wiele lat świat Linuksa korzystał z klasycznego systemu startowego SysVinit. Był prosty, przewidywalny i dobrze znany administratorom, ale wraz ze wzrostem złożoności systemów zaczęły pojawiać się problemy.

Nowoczesne serwery Linux uruchamiają dzisiaj:

  • dziesiątki usług sieciowych,
  • kontenery,
  • bazy danych,
  • systemy monitoringu,
  • środowiska wirtualizacji,
  • aplikacje działające jako mikroserwisy.

W takim środowisku klasyczny model:

Start usługi A

↓

Start usługi B

↓

Start usługi C

przestał być wystarczająco elastyczny.

Odpowiedzią stał się:

systemd.

Dzisiaj systemd jest standardowym systemem inicjalizacji w większości popularnych dystrybucji Linux, między innymi:

  • Debian,
  • Ubuntu,
  • Fedora,
  • RHEL,
  • Arch Linux,
  • openSUSE.

Nie jest już tylko „programem startującym system”.

To cały ekosystem odpowiedzialny za:

  • uruchamianie usług,
  • zarządzanie procesami,
  • logowanie zdarzeń,
  • obsługę urządzeń,
  • harmonogramowanie zadań,
  • zarządzanie sesjami użytkowników,
  • izolację usług.

Czym jest systemd?

systemd to pierwszy proces uruchamiany przez jądro Linux podczas startu systemu.

Jego identyfikator procesu zawsze wynosi:

PID 1

Sprawdzenie:

ps -p 1

Przykładowy wynik:

PID   COMMAND

1     /lib/systemd/systemd

Od tego momentu systemd przejmuje kontrolę nad uruchamianiem kolejnych elementów systemu.

Schemat startu:

BIOS/UEFI

↓

Bootloader (GRUB)

↓

Kernel Linux

↓

systemd (PID 1)

↓

Usługi systemowe

↓

Login użytkownika

Dlaczego systemd zastąpił SysVinit?

SysVinit działał według prostego modelu skryptów:

/etc/init.d/

start
stop
restart

Każda usługa posiadała skrypt startowy.

Problem:

Jeżeli mamy:

  • Apache,
  • MySQL,
  • SSH,
  • Docker,
  • Kubernetes,

system musiał uruchamiać je według ustalonej kolejności.

Nie zawsze było to optymalne.


systemd wprowadził:

Równoległe uruchamianie usług

Przykład:

Apache

      ↘

       systemd

      ↗

SSH

Jeżeli usługi nie zależą od siebie, mogą startować jednocześnie.

Efekt:

  • szybszy start,
  • lepsza kontrola zależności.

Architektura systemd

systemd składa się z wielu komponentów.

Najważniejsze:


systemd PID 1

Główny proces zarządzający systemem.

Odpowiada za:

  • start systemu,
  • zatrzymywanie systemu,
  • zarządzanie usługami.

systemd-journald

System logowania.

Zastępuje klasyczne:

/var/log/messages
/var/log/syslog

Zbiera:

  • komunikaty kernela,
  • logi usług,
  • błędy systemowe.

systemd-logind

Zarządza:

  • logowaniem użytkowników,
  • sesjami,
  • blokadą ekranu,
  • urządzeniami wejścia.

systemd-networkd

Obsługuje konfigurację sieci.

Alternatywa dla:

  • NetworkManager,
  • klasycznych skryptów sieciowych.

systemd-resolved

Obsługuje:

  • DNS,
  • cache zapytań,
  • lokalne rozwiązywanie nazw.

Jednostki systemd (Units)

Podstawowym elementem systemd są:

units (jednostki).

Każdy element zarządzany przez systemd jest jednostką.

Typy:


Service units (.service)

Najczęściej używane.

Przykład:

ssh.service

Opisują usługi.

Przykłady:

nginx.service

mysql.service

docker.service

Target units (.target)

Zastępują klasyczne poziomy uruchamiania:

SysV:

runlevel 3
runlevel 5

systemd:

multi-user.target

graphical.target

Timer units (.timer)

Zastępują cron.

Przykład:

backup.timer

Mount units (.mount)

Obsługują montowanie systemów plików.

Przykład:

data.mount

Socket units (.socket)

Obsługują aktywację usług przez gniazda.

Przykład:

docker.socket

Podstawowe zarządzanie usługami

Najważniejsze narzędzie:

systemctl

Sprawdzenie statusu usługi

Przykład:

systemctl status nginx

Wynik pokazuje:

  • czy działa,
  • PID procesu,
  • ostatnie logi,
  • błędy.

Uruchomienie usługi

systemctl start nginx

Zatrzymanie

systemctl stop nginx

Restart

systemctl restart nginx

Automatyczny start po uruchomieniu systemu

systemctl enable nginx

Wyłączenie autostartu

systemctl disable nginx

Tworzenie własnej usługi systemd

Załóżmy, że mamy aplikację:

/usr/local/bin/server.sh

Tworzymy plik:

/etc/systemd/system/server.service

Przykład:

[Unit]
Description=My Custom Server
After=network.target

[Service]
ExecStart=/usr/local/bin/server.sh
Restart=always
User=appuser

[Install]
WantedBy=multi-user.target

Następnie:

systemctl daemon-reload

Uruchomienie:

systemctl start server

Autostart:

systemctl enable server

Restartowanie usług po awarii

Jedna z największych zalet systemd.

Przykład:

[Service]

Restart=always
RestartSec=5

Oznacza:

jeżeli aplikacja zakończy działanie:

  • systemd uruchomi ją ponownie,
  • odczeka 5 sekund.

systemd jako alternatywa dla cron

Tradycyjny cron:

0 2 * * * backup.sh

systemd timer:

backup.timer

Przykład:

[Timer]
OnCalendar=daily
Persistent=true

Zaleta:

Jeżeli komputer był wyłączony:

systemd może wykonać zadanie po ponownym uruchomieniu.

 

systemd od podstaw do zaawansowanych zastosowań – jak działa współczesny system inicjalizacji Linux
systemd od podstaw do zaawansowanych zastosowań – jak działa współczesny system inicjalizacji Linux

Analiza startu systemu

systemd posiada narzędzia diagnostyczne.

Czas startu

systemd-analyze

Przykład:

Startup finished in 8.5s

Najwolniejsze usługi

systemd-analyze blame

Przykład:

8s mysql.service
5s docker.service

Graf zależności

systemd-analyze dot

Pozwala zobaczyć kolejność startu.


Zarządzanie logami przez journalctl

systemd używa:

journalctl

Wszystkie logi

journalctl

Logi konkretnej usługi

journalctl -u nginx

Logi od ostatniego uruchomienia

journalctl -b

Śledzenie logów na żywo

journalctl -f

systemd i bezpieczeństwo usług

Jedną z największych zalet systemd jest możliwość ograniczania usług.

Przykład:

[Service]

NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict

Możemy ograniczyć:

  • dostęp do systemu plików,
  • możliwość eskalacji uprawnień,
  • dostęp do katalogów.

Izolacja usług przez systemd

Przykład:

Serwer WWW nie musi mieć dostępu do całego systemu.

Możemy zastosować:

ProtectHome=yes

Efekt:

Apache nie zobaczy katalogów użytkowników.


systemd w środowisku serwerowym

Na serwerach systemd zarządza między innymi:

  • nginx,
  • Apache,
  • PostgreSQL,
  • MySQL,
  • Redis,
  • Docker,
  • SSH,
  • VPN,
  • monitoring.

Przykład:

systemd

 |

 +-- nginx.service

 +-- mysql.service

 +-- ssh.service

 +-- docker.service

systemd i kontenery

Docker wykorzystuje systemd między innymi do:

  • startu demona Docker,
  • zarządzania usługami,
  • integracji z Linux.

Kubernetes również często działa na systemach wykorzystujących systemd.


Przydatne polecenia administratora

Lista działających usług:

systemctl list-units --type=service

Wszystkie jednostki:

systemctl list-units

Błędy:

systemctl --failed

Zależności:

systemctl list-dependencies

Informacje o usłudze:

systemctl cat nginx

Najczęstsze problemy z systemd

Usługa nie startuje

Sprawdzenie:

systemctl status nazwa.service

oraz:

journalctl -xe

Zmiana pliku usługi nie działa

Po edycji:

systemctl daemon-reload

Usługa uruchamia się i natychmiast kończy

Najczęściej:

  • błędny parametr,
  • brak uprawnień,
  • aplikacja kończy pracę.

Sprawdzamy:

journalctl -u usluga

Zaawansowane zastosowania systemd

systemd może działać jako:

  • menedżer usług,
  • system watchdog,
  • narzędzie izolacji,
  • harmonogram,
  • kontroler zasobów.

Przykład ograniczenia CPU:

[Service]

CPUQuota=50%

Ograniczenie pamięci:

MemoryLimit=1G

systemd a administracja produkcyjnym serwerem

W środowiskach produkcyjnych systemd daje administratorowi:

  • przewidywalny start usług,
  • automatyczne odtwarzanie po awarii,
  • centralne logowanie,
  • kontrolę zasobów,
  • możliwość hardeningu.

Dlatego znajomość systemd jest obecnie jedną z podstaw pracy administratora Linux.


Podsumowanie

systemd nie jest już tylko zamiennikiem starego init.

To kompletny framework zarządzania systemem Linux.

Od podstawowych operacji:

systemctl start nginx

aż po zaawansowane mechanizmy:

  • izolację usług,
  • kontrolę zasobów,
  • watchdog,
  • własne jednostki,
  • analizę wydajności,

systemd stał się jednym z najważniejszych elementów współczesnych dystrybucji Linux.

Administrator, który dobrze rozumie systemd, potrafi nie tylko uruchomić usługę, ale również zaprojektować stabilne, bezpieczne i łatwe w utrzymaniu środowisko serwerowe.

Polecane wpisy
Linux dla początkujących: Podstawowe komendy i triki
Linux dla początkujących: Podstawowe komendy i trikiv

Linux dla początkujących: Podstawowe komendy i triki Linux to potężny system operacyjny, który może wydawać się skomplikowany dla początkujących. Jednak Czytaj dalej

Jak zainstalować i skonfigurować serwer FTP z VSFTPD na Ubuntu
Jak zainstalować i skonfigurować serwer FTP z VSFTPD na Ubuntu

Jak zainstalować i skonfigurować serwer FTP z VSFTPD na Ubuntu? Serwery FTP (File Transfer Protocol) są popularnym narzędziem do przesyłania Czytaj dalej

Marek "Netbe" Lampart Inżynier informatyki Marek Lampart to doświadczony inżynier informatyki z ponad 25-letnim stażem w zawodzie. Specjalizuje się w systemach Windows i Linux, bezpieczeństwie IT, cyberbezpieczeństwie, administracji serwerami oraz diagnostyce i optymalizacji systemów. Na netbe.pl publikuje praktyczne poradniki, analizy i instrukcje krok po kroku, pomagając administratorom, specjalistom IT oraz zaawansowanym użytkownikom rozwiązywać realne problemy techniczne.