W systemach opartych na Linux, zarządzanie procesami oraz usługami jest kluczowe dla stabilnego i wydajnego funkcjonowania systemu. Od 2010 roku narzędzie systemd stanowi standard dla wielu dystrybucji Linuxa, wprowadzając bardziej efektywną, zunifikowaną metodę zarządzania usługami, w tym uruchamianiem, zatrzymywaniem oraz monitorowaniem aplikacji działających w tle. Celem tego artykułu Szybkie rady #8 jak utworzyć własną usługę w systemd jest szczegółowe wyjaśnienie, czym jest systemd, jak działa, jak utworzyć własną usługę w systemd.
Czym jest systemd?
Systemd to menedżer systemu i usług zaprojektowany specjalnie dla systemów opartych na jądrze Linux. Jest to inicjalizacyjny daemon, co oznacza, że uruchamia się jako pierwszy proces po włączeniu systemu, pełniąc funkcję głównego zarządcy procesów, nazywanego PID 1 (ang. Process ID 1). W roli tej zastępuje starsze systemy init, takie jak System V (SysVinit) i Upstart, które dawniej dominowały w większości dystrybucji.
Kluczowe funkcje systemd:
- Zarządzanie usługami – systemd pozwala uruchamiać, zatrzymywać i monitorować usługi, zarówno te działające podczas startu systemu, jak i te, które działają w tle.
- Targety – systemd wykorzystuje targety, które są grupami usług i procesów, określającymi stan systemu, taki jak wieloużytkownikowy tryb tekstowy (
multi-user.target
) lub tryb graficzny (graphical.target
). Targety umożliwiają łatwe przechodzenie między różnymi stanami systemu. - Obsługa zależności – systemd sprawdza zależności między usługami, uruchamiając je w odpowiedniej kolejności i zapewniając, że wszystkie wymagane usługi są gotowe przed uruchomieniem głównego procesu.
- Logowanie – systemd oferuje centralne logowanie usług i aplikacji za pomocą
journalctl
, umożliwiając lepszą diagnostykę i analizę działania systemu. - Optymalizacja startu systemu – dzięki równoległemu uruchamianiu procesów oraz ścisłemu zarządzaniu zależnościami, systemd przyspiesza uruchamianie systemu, co jest istotne zarówno dla serwerów, jak i komputerów użytkowników indywidualnych.
Systemd składa się z różnych jednostek (units), takich jak service, target, socket, device, czy mount, które umożliwiają definiowanie i zarządzanie procesami oraz zależnościami między nimi.
Jak utworzyć własną usługę w systemd
Aby stworzyć własną usługę w systemd, należy utworzyć odpowiedni plik usługi, który będzie zawierał wszystkie potrzebne informacje dotyczące jej działania. Poniżej krok po kroku omówiony jest proces konfiguracji.
1. Utworzenie pliku usługi
Wszystkie pliki konfiguracyjne usług znajdują się w katalogu /etc/systemd/system/
. Aby utworzyć nową usługę, należy stworzyć plik z odpowiednim rozszerzeniem, np. tematyka-it.service. Nazwa pliku powinna być związana z aplikacją, którą chcemy uruchomić, aby ułatwić zarządzanie usługami w przyszłości.
2. Struktura pliku usługi
Każdy plik usługi w systemd składa się z sekcji, które określają, jak usługa ma się zachowywać. Najważniejsze z nich to:
- [Unit] – Zawiera ogólny opis usługi. Tutaj można określić jej nazwę, przeznaczenie oraz zależności.
- [Service] – Najważniejsza sekcja, która określa, w jaki sposób usługa będzie uruchamiana, kto jest jej właścicielem, gdzie znajduje się jej katalog roboczy oraz czy powinna być restartowana po awarii.
- [Install] – Określa docelowy target, w którym usługa ma być uruchamiana. Najczęściej jest to
multi-user.target
, aby usługa działała w trybie wieloużytkownikowym.
Przykład pliku usługi dla prostego skryptu:
[Unit]
Description=Przykład uruchomienia skryptu w tle
[Service]
User=root
Group=root
WorkingDirectory=/home/tematyka.it/
ExecStart=/home/tematyka.it/skrypt
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
3. Parametry
- Description – Krótki opis, który ułatwia identyfikację usługi.
- User i Group – Określają użytkownika i grupę, pod których kontrolą usługa będzie działać.
- WorkingDirectory – Definiuje katalog, z którego uruchamiana jest usługa. Umożliwia to np. dostęp do plików potrzebnych do działania aplikacji.
- ExecStart – Główna komenda uruchamiająca usługę. Może być to ścieżka do skryptu lub aplikacji.
- Restart oraz RestartSec – Parametry te określają, czy i jak często usługa powinna być restartowana w przypadku awarii.
- WantedBy – Określa target, z którym usługa jest powiązana, np.
multi-user.target
.
4. Przeładowanie konfiguracji systemd
Po zapisaniu pliku konfiguracji, aby nowa usługa była widoczna dla systemu, należy przeładować konfigurację systemd. Wykonuje się to za pomocą komendy:
sudo systemctl daemon-reload
5. Uruchomienie i sprawdzenie stanu usługi
Nowo utworzoną usługę można uruchomić poleceniem:
sudo systemctl start tematyka-it.service
Aby sprawdzić, czy usługa działa poprawnie, używamy komendy:
sudo systemctl status tematyka-it.service
6. Automatyczne uruchamianie usługi przy starcie systemu
Włączenie usługi aby uruchomiła się automatycznie po każdym starcie systemu.
sudo systemctl enable tematyka-it.service
7. Wyłączenie automatycznego uruchamiania
Jeśli chcemy, aby usługa nie uruchamiała się automatycznie, stosujemy komendę:
sudo systemctl disable tematyka-it.service
8. Zatrzymanie i usunięcie usługi
Aby zatrzymać działającą usługę, można użyć polecenia:
sudo systemctl stop tematyka-it.service
Jeśli usługa nie jest już potrzebna, wystarczy usunąć jej plik konfiguracyjny z katalogu /etc/systemd/system/
oraz przeładować konfigurację:
sudo rm /etc/systemd/system/tematyka-it.service
sudo systemctl daemon-reload
Podsumowanie – szybkie rady #8 jak utworzyć własną usługę w systemd
Systemd jest narzędziem do zarządzania usługami w systemach Linux. Użytkownicy mogą precyzyjne sterować procesami oraz definicjami usług, które uruchomią się automatycznie. Proces tworzenia własnej usługi obejmuje utworzenie pliku konfiguracji, przeładowanie systemd oraz kontrolowanie działania usługi za pomocą prostych komend. W poprzednim artykule opisano polecenie systemctl w Linux.