Můj problém:
Píšu bash skript a v něm bych chtěl zkontrolovat, zda daná služba běží.
Vím, jak to udělat ručně, se $ service [service_name] status
.
Ale (zejména od přechodu na systemd) to vytiskne spoustu textu, jehož analýza je trochu chaotická. Předpokládal jsem, že existuje příkaz vytvořený pro skripty s jednoduchým výstupem nebo návratovou hodnotou, kterou mohu zkontrolovat.
Ale googlování přináší jen tuny „Ach, jen ps aux | grep -v grep | grep [service_name]
" Výsledek. To nemůže být nejlepší postup, že? Co když je spuštěna jiná instance tohoto příkazu, ale nespuštěna inicializačním skriptem SysV?
Nebo mám prostě držet hubu a ušpinit si ruce trochou pgrepu?
Přijatá odpověď:
systemctl
má is-active
dílčí příkaz pro toto:
systemctl is-active --quiet service
ukončí se se stavem nula, pokud service
je aktivní, jinak nenulový, takže je ideální pro skripty:
systemctl is-active --quiet service && echo Service is running
Pokud vynecháte --quiet
také vypíše aktuální stav na standardní výstup.
Jak poukázal don_crissti, některé jednotky mohou být aktivní, i když pro poskytování služby nic neběží:jednotky označené jako „RemainAfterExit“ jsou považovány za aktivní, pokud úspěšně skončí, myšlenka je taková, že poskytují službu, která nepotřebuje démona. (např. konfigurují některé aspekty systému). Jednotky obsahující démony však budou aktivní pouze v případě, že démon stále běží.