GNU/Linux >> Linux Esercitazione >  >> Linux

Il modo "corretto" per verificare se un servizio è in esecuzione in uno script?

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.


Linux
  1. Il modo migliore per rilevare (da uno script) se il software è installato?

  2. Servizio del sistema operativo Linux 'scsi_reserve'

  3. Come testare uno script PHP

  4. Script Ruby come servizio

  5. Esecuzione di script di shell in parallelo

Qual è il modo migliore per garantire che sia in esecuzione solo un'istanza di uno script Bash?

C'è un modo per trovare il tempo di esecuzione dell'ultimo comando eseguito nella shell?

Qualsiasi modo per uscire dallo script bash, ma non uscire dal terminale

Servizio MongoDB non in esecuzione in Fedora

Come recuperare a livello di codice il GID di un processo in esecuzione

Qual è il modo più veloce per eseguire uno script?