1. Czym jest systemd i systemctl?
systemd to:
- 1. Czym jest systemd i systemctl?
- 2. Podstawowe pojęcia i stany usług
- 3. Jak wyświetlać usługi w systemd
- 4. Jak zarządzać usługami (start/stop/restart/autostart)
- 5. Jak sprawdzać szczegółowy stan usługi
- 6. Diagnozowanie problemów z usługami (journalctl, failed units)
- 7. Tworzenie, edycja i usuwanie usług systemd
- 8. Systemd w środowisku WSL (Windows Subsystem for Linux)
- 9. Alias i skróty ułatwiające pracę z usługami
- 10. Systemd vs. stare polecenia service
- 11. Praktyczne przykłady dla usług sieciowych
- 12. Narzędzia systemd do analizy czasu startu systemu
- 13. Bezpieczne podejście administracyjne – „checklista”
- 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. wmulti-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ługilubjournalctl -u nazwa_usługi -b; - od konkretnego momentu –
journalctl --since="2024-01-01 00:00"albojournalctl --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
- Sprawdź status usługi:
systemctl status nazwa_usługi. - Jeśli jest
failed, przejrzyj logi:journalctl -u nazwa_usługi -b. - Jeśli potrzebujesz logów z chwili awarii:
journalctl -u nazwa_usługi --since="30 minutes ago". - 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:
- Zatrzymaj usługę –
sudo systemctl stop your_service_name.service. - Wyłącz autostart –
sudo systemctl disable your_service_name.service. - Usuń plik usługi z
/etc/systemd/system/–sudo rm /etc/systemd/system/your_service_name.service. - Przeładuj konfigurację systemd –
sudo systemctl daemon-reload. - 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:
- Otwórz powłokę dystrybucji i przejdź do katalogu głównego:
cd /. - Edytuj plik konfiguracji:
sudo nano /etc/wsl.conf. - Dodaj sekcję uruchamiania systemd:
[boot]orazsystemd=true. - Zapisz plik i w PowerShell zamknij WSL:
wsl.exe --shutdown. - 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:
- Chcesz zobaczyć, co działa? Użyj:
systemctl --type=service --state=running. - Chcesz włączyć usługę przy starcie i od razu uruchomić? Wpisz:
sudo systemctl enable --now nazwa_usługi. - Usługa nie działa lub padła? Sprawdź:
systemctl status nazwa_usługi,systemctl --failed,journalctl -u nazwa_usługi -b. - Zmieniłeś konfigurację usługi? Zastosuj restart:
sudo systemctl restart nazwa_usługi. - Usługa jest niepotrzebna (np. własny daemon)? Zatrzymaj, wyłącz autostart, usuń plik
.servicei wykonajdaemon-reload.








