Zjednodušeně řečeno, systemd je „šéf“ linuxového operačního systému. Je to první proces, který se spustí po zapnutí počítače (má procesní ID 1), a poslední, který běží při vypínání.
Jeho hlavním úkolem je správa systému a služeb. Pokud se má po startu automaticky zapnout Wi-Fi, spustit databáze nebo se přihlásit uživatel, má to na starosti právě systemd.
Co všechno systemd dělá?
Dávno to není jen jednoduchý spouštěč (init systém). Je to celý balík nástrojů, který spravuje:
Služby (Services): Spouštění, zastavování a sledování programů na pozadí.
Závislosti: Inteligentně ví, že služba B se nesmí spustit, dokud neběží služba A.
Logování (journald): Sbírá systémové zprávy do binárních logů (prohlížíte je příkazem
journalctl).Hardware: Správa připojených zařízení.
Co všechno systemd dělá?
Dávno to není jen jednoduchý spouštěč (init systém). Je to celý balík nástrojů, který spravuje:Čas a sítě: Synchronizace času (systemd-timesyncd) a nastavení sítě (systemd-networkd).
Základní příkazy, které se hodí znát
Pokud pracujete v terminálu, s systemd budete komunikovat hlavně přes nástroj systemctl:
systemctl start název_služby– zapne službu.systemctl stop název_služby– vypne službu.systemctl status název_služby– ukáže, jestli služba běží a co právě dělá.systemctl enable název_služby– zajistí, aby se služba spustila sama po startu PC.
Zapomeňte na screen, který vyžaduje, abyste se k němu ručně připojili. systemd je správce systému, který vaši službu (váš Python skript) nastartuje hned po spuštění Raspberry Pi, bude hlídat její běh, a kdyby náhodou spadla (kvůli chybě v kódu, výpadku senzoru atd.), tak ji automaticky restartuje .
Pojďme si to ukázat v praxi. Je to jednodušší, než to zní.
Jak nastavit program jako systemd službu
Postup je vždy stejný. Vytvoříme jeden konfigurační soubor, který systemd řekne, co a jak má dělat.
Krok 1: Vytvoření konfiguračního souboru
Na Raspberry Pi spusťte tento příkaz pro vytvoření a editaci nového souboru:
bash
sudo nano /etc/systemd/system/soubor.service
Krok 2: Napsání konfigurace
Do otevřeného editoru vložte následující obsah. Nezapomeňte upravit zvýrazněné cesty na své vlastní (uživatel, adresář projektu, skript).
ini
[Unit]
Description=Pan Domaci - spravce domu
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=simple
User=ludek
Group=ludek
WorkingDirectory=/home/ludek/projekt
ExecStart=/home/ludek/projekt/venv/bin/python3 /home/ludek/projekt/hlavni_bot.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Pojďme si vysvětlit, co jednotlivé sekce a řádky znamenají :
[Unit] – Základní popis a závislosti.
Description: Co je to za službu (vidíte to pak v různých výpisech).
After a Wants: Říkáme, že program se má spustit až poté, co je funkční síť. To je důležité, aby se hned po startu mohl připojit k internetu a čekat na vaše příkazy .
[Service] – Nejdůležitější část – jak se má služba chovat .
Type=simple: Pro naše skripty s nekonečnou smyčkou je to správná volba .
User a Group: Spouštíme službu pod tvým uživatelským účtem (ludek), aby měla přístup ke všem tvým souborům a nastavením, které potřebuje .
WorkingDirectory: Nastaví se do složky s projektem, což je užitečné, pokud skript pracuje s relativními cestami (např. ./data/log.csv).
ExecStart: Nejdůležitější řádek. Je to přesný příkaz, který spustí tvůj bot. Pozor, používáme Python z virtuálního prostředí, aby byly knihovny správně izolované.
Restart=always: Říkáme systemd, že má službu vždy restartovat, když skončí (ať už dobrovolně, nebo pádem) . Přesně to chceme pro 24/7 provoz.
RestartSec=10: Před opětovným startem počká 10 sekund, aby se systém uklidnil.
[Install] – Říká systemd, kdy má službu automaticky spouštět.
WantedBy=multi-user.target: Znamená "spusť mě při startu systému do normálního multi-uživatelského režimu" .
Soubor uložte (Ctrl+O, Enter, Ctrl+X).
Krok 3: Aktivace a testování
Nyní systemd o nové službě řekneme a poprvé ji spustíme.
bash
# 1. Znovu načti konfiguraci systemd (aby věděl o novém souboru)
sudo systemctl daemon-reload
# 2. Povol, aby se služba spouštěla automaticky při bootu
sudo systemctl enable pan_domaci.service
# 3. Spusť službu hned teď (pro test)
sudo systemctl start pan_domaci.service
Krok 4: Ovládání a monitoring
Toto jsou nejužitečnější příkazy pro správu :
bash
# Zobraz, zda služba běží, a podívej se na pár posledních řádků logu
sudo systemctl status program.service
# Sleduj log v reálném čase (od této chvíle)
sudo journalctl -u program.service -f
# Zastav službu
sudo systemctl stop program.service
# Restartuj službu
sudo systemctl restart program.service
Proč je to lepší než screen?
Automatický start: Jakmile zapojíte Raspberry Pi do zásuvky, "program" se sám probudí. Nemusíte se nikam připojovat a nic ručně spouštět.
Samoléčení: Když skript spadne (např. kvůli přechodné chybě senzoru), systemd ho sám za 10 vteřin znovu nastartuje. Vy o tom ani nemusíte vědět .
Integrace do systému: Služba se chová jako každá jiná systémová služba. Můžete ji spravovat standardními příkazy a její logy automaticky končí v systémovém deníku (journalctl), odkud je snadno dohledáte .
Žádné komentáře:
Okomentovat
Poznámka: Komentáře mohou přidávat pouze členové tohoto blogu.