Systemd je init systém na většině moderních distribucí. Poskytuje jednotný způsob správy procesů, služeb a logů a nahrazuje starší SysVinit a Upstart. Oproti jednoduchým init skriptům nabízí deklarativní konfiguraci, automatické řešení závislostí, paralelní start služeb a pokročilé řízení prostředků. Pochopení systemd je nezbytné pro každého, kdo spravuje Linux servery.
Základní příkazy¶
systemctl start|stop|restart|reload|status nginx
systemctl enable|disable nginx
systemctl list-units --type=service --state=failed
systemctl list-timers # systemd timery (náhrada cronu)
Příkaz systemctl status zobrazí stav služby včetně posledních řádků logu, PID a doby běhu. Pro detailnější diagnostiku použijte journalctl -u služba.
Vlastní služba¶
[Unit]
Description=Moje aplikace
After=network.target postgresql.service
[Service]
Type=simple
User=app
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/server --port 8080
Restart=on-failure
RestartSec=5
EnvironmentFile=/opt/myapp/.env
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now myapp
Sekce [Unit] definuje závislosti — After zajistí správné pořadí startu, Requires tvrdou závislost. [Service] nastavuje spouštění: Type=simple pro přímý start, Type=forking pro démony, Type=notify pro služby oznamující připravenost. Restart=on-failure automaticky restartuje při selhání, RestartSec nastavuje prodlevu mezi pokusy.
Resource limity¶
[Service]
CPUQuota=200%
MemoryMax=2G
LimitNOFILE=65535
ProtectSystem=strict
PrivateTmp=yes
NoNewPrivileges=yes
Systemd cgroups limity izolují služby a zabraňují jedné službe spotřebovat všechny systémové prostředky. ProtectSystem=strict zajistí read-only přístup k systémovým adresářům, PrivateTmp izoluje /tmp pro každou službu. Tyto bezpečnostní direktivy jsou doporučeny pro produkční nasazení.
Debugging¶
systemctl status myapp -l # kompletní status s logy
journalctl -u myapp --since '5 min ago' # logy za posledních 5 minut
systemd-analyze blame # co zpomaluje boot
systemd-analyze critical-chain myapp # závislostní řetězec
Systemd je standard¶
Naučte se unit soubory, závislosti a resource limity. Investice do systemd znalostí se vrátí při každém nasazení a troubleshootingu.