GNU/Linux >> Znalost Linux >  >> Linux

„Správný“ způsob, jak otestovat, zda služba běží ve skriptu?

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ěď:

systemctlis-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ěží.


Linux
  1. Význam $? Ve skriptu Shell?

  2. Zkontrolujte spuštěné služby v systému Linux

  3. Služba OS Linux „scsi_reserve“

  1. Jak testovat PHP skript

  2. Jaký je nejlepší způsob, jak zajistit, aby byla spuštěna pouze jedna instance skriptu Bash?

  3. Paralelní spuštění skriptu shellu

  1. Jaký je správný způsob, jak spustit službu mongod na linux / OS X?

  2. Jakýkoli způsob, jak ukončit bash skript, ale ne opustit terminál

  3. Linuxový skript pro kontrolu, zda proces běží, a podle výsledku jednat