GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Der „richtige“ Weg, um zu testen, ob ein Dienst in einem Skript ausgeführt wird?

Mein Problem:

Ich schreibe ein Bash-Skript und möchte darin überprüfen, ob ein bestimmter Dienst ausgeführt wird.

Ich weiß, wie man das manuell macht, mit $ service [service_name] status .

Aber (besonders seit dem Wechsel zu systemd) druckt das eine ganze Menge Text, der ein wenig unordentlich zu analysieren ist. Ich bin davon ausgegangen, dass es einen Befehl für Skripte mit einfacher Ausgabe oder einem Rückgabewert gibt, den ich überprüfen kann.

Aber Googeln liefert nur eine Menge „Oh, nur ps aux | grep -v grep | grep [service_name] " Ergebnisse. Das kann nicht die beste Praxis sein, oder? Was ist, wenn eine andere Instanz dieses Befehls ausgeführt wird, aber keine vom SysV-Init-Skript gestartet wurde?

Oder soll ich einfach die Klappe halten und mir mit ein bisschen Pgrep die Hände schmutzig machen?

Akzeptierte Antwort:

systemctl hat einen is-active Unterbefehl dafür:

systemctl is-active --quiet service

wird mit Status Null beendet, wenn service ist aktiv, ansonsten ungleich Null, was es ideal für Skripte macht:

systemctl is-active --quiet service && echo Service is running

Wenn Sie --quiet weglassen es wird auch den aktuellen Status auf seiner Standardausgabe ausgeben.

Wie von don_crissti betont, können einige Units aktiv sein, obwohl nichts läuft, um den Dienst bereitzustellen:Units, die als „RemainAfterExit“ gekennzeichnet sind, gelten als aktiv, wenn sie erfolgreich beendet werden, da sie einen Dienst bereitstellen, der keinen Daemon benötigt (z. B. sie konfigurieren einen Aspekt des Systems). Einheiten mit Daemons sind jedoch nur aktiv, wenn der Daemon noch läuft.


Linux
  1. Einfache Möglichkeit, den SSH-Geschwindigkeitstest zu überprüfen

  2. Der beste Weg, um (aus einem Skript) zu erkennen, ob Software installiert ist?

  3. Überprüfen, ob ein Skript ausgeführt wird?

  4. Die Bedeutung von $? In einem Shell-Skript?

  5. Linux-Betriebssystemdienst „scsi_reserve“

Shell-Skript parallel ausführen

Was ist der richtige Weg, um einen Mongod-Dienst unter Linux / OS X zu starten?

MongoDB-Dienst läuft nicht in Fedora

Führen Sie das Bash-Skript als Daemon aus

Was ist der schnellste Weg, um ein Skript auszuführen?

Was ist der beste Weg, um zu überprüfen, ob ein Volume in einem Bash-Skript gemountet ist?