Linux · usługi i dziennik

Usługi systemowe w Linuksie — systemctl i dziennik zdarzeń na przykładowych wynikach

Usługi w Linuksie: status, lista usług i dziennik zdarzeń. Trzy zadania z awk i grep na przykładowych wynikach systemctl i journalctl, klucz i skrypt.

45 minutPoziom podstawowyPliki i rozwiązania

Materiał redakcyjny TablicaPro · liceum i technikum

$ awk '$3 == "failed" {print $1}' uslugi.txt
apache2.service
Stan usług i błędy odczytane z przykładowych wyników.
Przyczyna awarii znaleziona w dzienniku.

Serwer WWW, zdalny dostęp przez SSH, drukowanie — to wszystko są usługi (demony), czyli programy działające w tle. W większości dystrybucji, także w Ubuntu, zarządza nimi system systemd i polecenie systemctl. Gdy coś nie działa, pierwszym krokiem jest sprawdzenie stanu usługi, a drugim — przeczytanie dziennika zdarzeń. Na lekcji uczniowie analizują przykładowe wyniki takich poleceń, nie zmieniając ustawień prawdziwego systemu.

Scenariusz jest przeznaczony na 45 minut dla klasy znającej potoki, grep i awk — na przykład po lekcji o użytkownikach i grupach. Wyniki w skrypcie są uproszczonymi przykładami (nazwy usług, daty i adresy są przykładowe, a dokładny wygląd zależy od wersji systemu). Polecenia, które zmieniają stan usług (start, stop, enable), wymagają sudo i wolno je wypróbować wyłącznie w maszynie wirtualnej pod opieką nauczyciela.

Przygotowanie stanowisk

Potrzebny jest terminal z powłoką bash (Ubuntu, WSL lub maszyna wirtualna). Ćwiczenia wykonuj na zwykłym koncie, bez sudo. Skrypt rozwiazanie.sh z pakietu odtwarza całą lekcję w katalogu tymczasowym (mktemp -d) i usuwa tylko ten katalog — nie zmienia Twoich plików; uruchamiasz go poleceniem bash rozwiazanie.sh. Ćwiczenia z karty pracy wykonaj ręcznie w terminalu, w osobnym katalogu ćwiczeniowym.

Cele i plan lekcji

Po zajęciach uczeń potrafi:

  • odczytać z wyniku systemctl status stan usługi, numer procesu głównego i informację o włączeniu przy starcie;
  • znaleźć w liście usług te, które nie działają (failed, inactive);
  • przeszukać dziennik zdarzeń pod kątem błędów i nieudanych logowań;
  • opisać znaczenie poleceń start, stop, restart, enable, disable i journalctl.
CzasPraca na lekcji
0–5 minProblem: usługa nie odpowiada — co sprawdzić najpierw?
5–15 minsystemd, systemctl, dziennik
15–22 minCzytanie wyników i filtrowanie awk/grep
22–37 minTrzy zadania
37–42 minPlan reakcji na usługę w stanie failed
42–45 minPytania kontrolne

Polecenia do zarządzania usługami

PolecenieDziałanie
systemctl status sshstan usługi i kilka ostatnich wpisów z dziennika
sudo systemctl start ssh / stop / restarturuchom / zatrzymaj / uruchom ponownie
sudo systemctl enable ssh / disablewłącz / wyłącz automatyczny start przy uruchomieniu systemu
systemctl list-units --type=servicelista usług i ich stanów
journalctl -u sshdziennik zdarzeń konkretnej usługi
journalctl -p errtylko wpisy o poziomie „błąd” i wyższym

Zmiana stanu usługi wymaga uprawnień administratora (sudo). Uruchomienie (start) działa teraz, włączenie (enable) wpływa na następne uruchomienia systemu — to dwie różne rzeczy.

Czytanie wyniku status

Wiersz Loaded: mówi, czy plik usługi został wczytany i czy jest włączona przy starcie (enabled). Wiersz Active: pokazuje stan: active (running) — działa; inactive (dead) — nie działa; failed — próba uruchomienia zakończyła się błędem. Main PID to numer głównego procesu usługi.

Dziennik zdarzeń

Dziennik zawiera wpisy z czasem, nazwą komputera, nazwą programu (z numerem procesu) i komunikatem. Wiele nieudanych logowań w krótkim czasie z jednego adresu może oznaczać próbę odgadnięcia hasła — w przykładzie dwie nieudane próby poprzedzają udane logowanie użytkownika ola, co może być zwykłą pomyłką. Wpis apache2.service: Failed with result 'exit-code' wraz z poprzednim wierszem o błędzie składni w konfiguracji tłumaczy, dlaczego usługa jest w stanie failed.

Zadania

Zadanie 1. Status. Z pliku status.txt odczytaj stan usługi, numer procesu głównego i liczbę wierszy zawierających słowo enabled.

Zadanie 2. Lista usług. Z uslugi.txt wypisz usługi w stanie failed, policz działające (running) i wypisz nieaktywne (inactive).

Zadanie 3. Dziennik. Policz nieudane logowania, policz je dla każdego użytkownika, znajdź godzinę pierwszej awarii, policz udane logowania i wypisz usługę, która zakończyła się błędem.

Dla chętnych: w maszynie wirtualnej sprawdź systemctl status dla dwóch usług i opisz różnice w polach Loaded i Active.

Rozwiązanie i wyniki

set -e
TMP=$(mktemp -d)
cd "$TMP"
cat > status.txt <<'DANE'
ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Mon 2028-03-27 08:15:02 CET; 2h 10min ago
   Main PID: 812 (sshd)
DANE
cat > uslugi.txt <<'DANE'
ssh.service     loaded active   running OpenBSD Secure Shell server
cron.service    loaded active   running Regular background program processing daemon
apache2.service loaded failed   failed  The Apache HTTP Server
cups.service    loaded inactive dead    CUPS Scheduler
DANE
cat > dziennik.txt <<'DANE'
mar 27 08:15:02 ubuntu systemd[1]: Started ssh.service.
mar 27 08:20:11 ubuntu sshd[812]: Failed password for ola from 192.168.56.5
mar 27 08:20:15 ubuntu sshd[812]: Failed password for ola from 192.168.56.5
mar 27 08:21:03 ubuntu sshd[812]: Accepted password for ola from 192.168.56.5
mar 27 09:02:44 ubuntu apache2[1210]: AH00526: Syntax error on line 12
mar 27 09:02:45 ubuntu systemd[1]: apache2.service: Failed with result 'exit-code'.
DANE

echo "--- Zadanie 1: status uslugi"
awk '/Active:/ {print $2}' status.txt
awk '/Main PID:/ {print $3}' status.txt
grep -c "enabled" status.txt

echo "--- Zadanie 2: lista uslug"
awk '$3 == "failed" {print $1}' uslugi.txt
awk '$4 == "running"' uslugi.txt | wc -l
awk '$3 == "inactive" {print $1}' uslugi.txt

echo "--- Zadanie 3: dziennik"
grep -c "Failed password" dziennik.txt
awk '/Failed password/ {n[$9]++} END {for (u in n) print u, n[u]}' dziennik.txt
grep -m1 "Failed" dziennik.txt | awk '{print $3}'
grep -c "Accepted password" dziennik.txt
awk '/Failed with result/ {print $6}' dziennik.txt

cd /
rm -r "$TMP"

Skrypt rozwiazanie.sh z pakietu wykonuje te polecenia w katalogu tymczasowym i wypisuje:

--- Zadanie 1: status uslugi
active
812
1
--- Zadanie 2: lista uslug
apache2.service
2
cups.service
--- Zadanie 3: dziennik
2
ola 2
08:20:11
1
apache2.service:

Typowe błędy

ObjawCo sprawdzić
Failed to connect to bus lub brak uprawnieńZmiana stanu usługi wymaga sudo.
Usługa działa, ale nie startuje po restarcie komputeraUruchomiono ją (start), ale nie włączono (enable).
Pomylenie inactive z failedinactive to usługa zatrzymana, failed — zakończona błędem.
Wynik dziennika bez filtra jest za długiUżyj journalctl -u nazwa lub -p err.
Ignorowanie wpisu przed błędemPrzyczyna jest często w poprzednim wierszu dziennika.
Zatrzymanie usługi na komputerze szkolnymĆwiczenia ze zmianą stanu tylko w maszynie wirtualnej.

Pytania kontrolne i punktacja

  1. Czym różni się start od enable?
  2. Co oznacza stan failed?
  3. Gdzie szukasz przyczyny awarii usługi?

Odpowiedzi: start uruchamia usługę teraz, enable sprawia, że będzie uruchamiana przy każdym starcie systemu. Że próba uruchomienia usługi zakończyła się błędem. W dzienniku zdarzeń (journalctl -u nazwa), zwłaszcza we wpisach tuż przed błędem.

Proponowana punktacja (razem 10 punktów): zadanie 1 — stan, PID i enabled po 1 pkt; zadanie 2 — trzy zapytania po 1 pkt; zadanie 3 — trzy pierwsze zapytania 2 pkt, dwa ostatnie 1 pkt; start a enable w pytaniach 1 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.

Materiały do pobrania

Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.

Co dalej?

Następny krok to harmonogram zadań (cron), zdalny dostęp przez SSH i zapora sieciowa. Ten materiał rozwija dział o administrowaniu systemem w kursie Linux w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.

Źródła techniczne: dokumentacja systemctl oraz journalctl. Zobacz też lekcję o użytkownikach i grupach.

Poprowadź kolejne lekcje Linux

Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.

Kup dostęp do kursu Linux →

Zobacz program kursu