Il mio problema:
Sto scrivendo uno script bash e in esso vorrei verificare se un determinato servizio è in esecuzione.
So come farlo manualmente, con $ service [service_name] status
.
Ma (soprattutto dopo il passaggio a systemd) stampa un sacco di testo che è un po' disordinato da analizzare. Ho pensato che ci fosse un comando creato per gli script con un output semplice o un valore di ritorno che posso controllare.
Ma cercare su Google produce solo un sacco di "Oh, solo ps aux | grep -v grep | grep [service_name]
risultati. Non può essere la migliore pratica, vero? Cosa succede se un'altra istanza di quel comando è in esecuzione, ma non una avviata dallo script di inizializzazione SysV?
O dovrei semplicemente tacere e sporcarmi le mani con un po' di pgrep?
Risposta accettata:
systemctl
ha un is-active
sottocomando per questo:
systemctl is-active --quiet service
uscirà con lo stato zero se service
è attivo, altrimenti diverso da zero, il che lo rende ideale per gli script:
systemctl is-active --quiet service && echo Service is running
Se ometti --quiet
emetterà anche lo stato corrente sul suo output standard.
Come sottolineato da don_crissti, alcune unità possono essere attive anche se nulla è in esecuzione per fornire il servizio:le unità contrassegnate come "RemainAfterExit" sono considerate attive se escono correttamente, l'idea è che forniscono un servizio che non necessita di un demone (es. configurano alcuni aspetti del sistema). Le unità che coinvolgono demoni saranno tuttavia attive solo se il demone è ancora in esecuzione.