• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Status eines Dienstes abfragen und verwenden

Hallo Leute,

ich schreibe ein Skript, in dem ich Dienste stoppe, Daten sichere und anschließend die Dienste wieder starte. Ich möchte gerne unnötige Fehlermeldungen vermeiden, falls die Dienste bei der Ausführung des Skriptes nicht laufen sollten (wird später über cron gesteuert).

Wie ich den Status eines Dienstes abfrufe, weiss ich, aber wie kann ich das Ergebnis des Status verwenden?
Ich will also die Dienste nur stoppen, falls sie laufen.

Mir kommt gerade eine Idee. Wenn ich z.B. ps aux | grep [Dienstname] ausführe und dabei das Ergenis negativ ist, wäre das eine sichere Überprüfung? Wenn ja, wie überprüfe ich, ob das Ergebnis negativ ist?

Vielen Dank im voraus.


Gruß
tsj
 
Ob ein Dienst läuft oder nicht, bestimmt man nicht mit ps, sondern mit dem Initskript.

Zum Beispiel so:
Code:
/etc/init.d/dbus status
Das Ergebnis sieht vielleicht so aus:
Code:
Checking for service D-Bus daemon                                    running
(Achtung, verwende nicht die rc*-Symlinks in /sbin oder /usr/sbin, sondern immer direkt die Skripte in /etc/init.d)

Dann wertest Du den Exit-Code dieses Befehls aus, wobei die Exit-Codes folgende Bedeutung haben:

0 program is running or service is OK
1 program is dead and /var/run pid file exists
2 program is dead and /var/lock lock file exists
3 program is not running
4 program or service status is unknown

Siehe auch:

http://www.freestandards.org/spec/booksets/LSB-Core-generic/LSB-Core-generic/iniscrptact.html
 
Hab gerade bemerkt, dass das leider in diesem Fall nicht funktioniert.

Es geht hierbei speziell um den Apache.

1. Führe ich ./apachectl status aus, bekomme ich eine Fehlermeldung des Lynx Interpreters (Command not found).
2. Wenn ich zweimal hintereinander ./apachectl stop ausführe, bekomme ich eine Fehlermeldung. echo $? gibt mir trotzdessen 0 aus.

Ne Idee?
 
Dann ist dieses Skript entweder kein Initskript oder es ist nicht LSB-konform.

Wenn es kein Initskript ist, gilt das oben Gesagte nicht. ;)
 
Oben