Návod pro administrátory a uživatele
Ve výchozím nastavení se systemd služby spuštěné pod uživatelem vypnou v momentě odhlášení. Aby mohly běžet nepřetržitě, je potřeba povolit uživateli lingering.
Lingering
loginctl enable-linger <uživatel>
Ověření
Pokud má uživatel povolený lingering, bude se vyskytovat jeho uživatelské jméno v této složce:
ls /var/lib/systemd/linger/
Správa uživatelských služeb
Pro správu uživatelských služeb je nutné využít při
systemctl --machine=<uživatel>@.host --user <příkaz> <název-aplikace>
Dostupné příkazy jsou:
start - Pro spuštění službystop - Pro vypnutí službystatus - Pro výpis statusu službyenable - Pro automatické zapnutí služby při startu serverudisable - Vypne automatické zapnutí služby při startu serveruVypnutí všech služeb uživatele
Pro vypnutí všech služeb najednou, z jakéhokoliv důvodu lze využít:
loginctl kill-user <uživatel>
Jedná se o kompletní vypnutí všech běžících služeb uživatele, takže uživatel je také odhlášen
Služby které jsou povolené při autostartu to při startu serveru opět zapne
Uživatel má dostupnou vlastní instanci systemd, ale je nutné vždy využít --user přepínače při zapínání
1. Vytvoření adresářové struktury:
Vytvoříme složku, ve které uživatel bude mít vlastní soubory s definovanými službami .service.
mkdir -p ~/.config/systemd/user
2. Vytvoření souboru se službou:
Vytvoříme soubor s příponou .service v nově vytvořeném adresáři. Zvolíme si preferovaný editor (v tomto případě využíváme nano)
nano ~/.config/systemd/user/moje-aplikace.service
Vytvoříme v něm konfiguraci pro naší aplikaci.
Příklad:
[Unit]
# Popis služby
Description=Moje aplikace
# Nastavíme že se služba spustí po startu síťového stacku
After=network.target
[Service]
# Typ služby
Type=simple
# Absolutní cesta k vašemu skriptu nebo aplikaci
ExecStart=/home/<uzivatel>/moje-aplikace/start.sh
# Pokud se aplikace ukončí, systemd ji automaticky restartuje
Restart=on-failure
RestartSec=5
[Install]
# U uživatelských služeb se používá default.target, NIKOLIV multi-user.target!
WantedBy=default.target
Aplikace v ExecStart musí mít práva ke spuštění. Ta lze přidat pomocí:
chmod +x /home/<uzivatel>/moje-aplikace/start.sh
3. Načtení služby do systemd
Kdykoliv vytvoříme novou službu nebo upravíme stávající službu ve složce, je nutné říct systemd aby novou konfiguraci načetl s pomocí příkazu:
systemctl --user daemon-reload
4. Správa služby (Start, Stop, Autostart)
Nyní lze ovládat službu za použití --user přepínače
Spuštění služby:
systemctl --user start moje-aplikace.service
Zastavení služby:
systemctl --user stop moje-aplikace.service
Kontrola stavu služby:
systemctl --user status moje-aplikace.service
Restartování služby:
systemctl --user restart moje-aplikace.service
Zapnutí autostartu (služba se spustí po startu serveru):
systemctl --user enable moje-aplikace.service
Vypnutí autostartu:
systemctl --user disable moje-aplikace.service
Přístup k logům
Veškerý výstup vaší aplikace (standardní výstup i chyby) systemd automaticky zachytává. Pro čtení logů vaší konkrétní služby použijte journalctl s parametrem --user:
# Zobrazení všech logů dané služby
journalctl --user -u moje-aplikace.service
# Sledování logů v reálném čase (podobně jako tail -f)
journalctl --user -u moje-aplikace.service -f
Důležité upozornění: Ujistěte se, že skript nebo soubor definovaný v ExecStart má práva ke spuštění (chmod +x /cesta/k/souboru). Vždy používejte absolutní cesty (např. /home/<uzivatel>/skript.sh, nikoliv ~/skript.sh).