Die meisten Leute führen ihren httpd (Apache, Nginx usw.) über ein Init-System aus. Das ist mit ziemlicher Sicherheit der Fall, wenn Sie aus einem Paket installiert haben. Fast alle diese Init-Systeme haben eine Methode, die funktioniert, wenn sie läuft. In meinem Fall verwende ich nginx, das ein Init-Skript im SysV-Stil enthält und einen status
akzeptiert Argument, etwa so:
$ /etc/init.d/nginx status
* nginx is running
Wenn Sie ein anderes httpd-, Skript- oder Init-System verwenden, haben Sie natürlich eine etwas andere Syntax, aber wenn Sie den httpd nicht manuell starten (was sich wie die schlechteste Idee der Welt anfühlt), sind Sie es wahrscheinlich mit einem netten, verwalteten Startskript, mit dem Sie den Status abfragen können.
Die Antwort von slm hat mehr über diese Art von Init-Abfragen, aber das Problem mit dem Vertrauen, dass es Ihnen nur wirklich sagt, ob ein Prozess noch läuft. Der Hauptprozess Ihres httpd könnte laufen, aber in gewisser Weise festgefahren. Es ist sehr sinnvoll, einfache Init-Tests zu überspringen und mit Verhaltenstests fortzufahren.
Eine Sache, die wir über httpds wissen, ist, dass sie zuhören. Normalerweise auf Port *:80
, aber wenn dies bei Ihnen nicht der Fall ist, können Sie den folgenden Code anpassen. Hier bin ich gerade awk
Ausgabe von netstat
um zu sehen, ob es am richtigen Port lauscht.
$ sudo netstat -ntlp | awk '$4=="0.0.0.0:80"'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2079/nginx
Wir könnten auch welche überprüfen Prozess läuft auch, um sicherzustellen, dass das richtig ist httpd läuft. Wir könnten alle möglichen Kontrollen durchführen. Hängt davon ab, wie paranoid du sein möchtest :)
Aber selbst das ist nur ein Spiegelbild eines httpd. Willst du es wirklich testen? Nun, lassen Sie uns testen es.
$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200
Ich schaue mir nur den Antwortcode an (200 bedeutet „A-Okay!“), aber noch einmal, wir könnten uns einarbeiten und die Ausgabe tatsächlich testen, um sicherzustellen, dass sie korrekt generiert wird.
Aber selbst das ist nicht so gründlich. Sie überprüfen gerade localhost
und es meldet 200, nichts falsch? Was wäre, wenn Biber das Netzwerkkabel durchkauen würden, das den httpd versorgt (aber nicht den Rest des Systems)? Dann was?! Sie melden die Betriebszeit, wenn Sie tatsächlich ausgefallen sind. Wenige Dinge sehen unprofessioneller aus als falsche Statusdaten.
Lassen Sie uns also mit einem externen Server sprechen (idealerweise mit einer ganz anderen Verbindung, in einer anderen, weit, weit entfernten Galaxie) und ihn bitten, unseren Server abzufragen:
$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200
Zu diesem Zeitpunkt sind alle gemeldeten Probleme entweder In-App-Probleme (die ihre eigene Fehlerbehandlung und -meldung haben können, oder sie liegen beim Kunden).
Eine Kombination dieser Tests kann ebenfalls dabei helfen, das Problem zu ermitteln.
Sie können den Dienstbefehl universell auf den meisten Linux-Distributionen verwenden.
$ service <service> status
Beispiel
$ service httpd status
httpd (pid 23569) is running...
Derselbe Befehl kann für alle Dienste verwendet werden, die einzeln ausgeführt werden, oder um den Status aller Dienste zu ermitteln.
$ service --status-all
python is stopped
automount (pid 22457) is running...
Avahi daemon is not running
Avahi DNS daemon is not running
crond (pid 23577) is running...
gpm is stopped
hald is stopped
httpd (pid 23569) is running...
...
Die verschiedenen Methoden innerhalb von SysVinit, Systemd und Upstart zum Auflisten von Diensten
Wenn Sie eines der typischeren Dienstverwaltungs-Frameworks verwenden, können Sie die Dienste mit den folgenden Methoden auflisten.
SysVinit
$ ls -l /etc/init.d/ | head -10
total 220
-rwxr-xr-x 1 root root 1422 Jan 13 2009 ajaxterm
-rwxr-xr-x 1 root root 3052 Apr 20 2012 autofs
-rwxr-xr-x 1 root root 1877 Apr 13 2011 avahi-daemon
-rwxr-xr-x 1 root root 1824 Apr 13 2011 avahi-dnsconfd
-rwxr-xr-x 1 root root 1926 Feb 22 2012 crond
-rwxr-xr-x 1 root root 14291 Dec 19 2011 functions
-rwxr-xr-x 1 root root 1778 Jan 6 2007 gpm
-rwxr-xr-x 1 root root 1586 Mar 5 2011 haldaemon
-rwxr-xr-x 1 root root 5742 Dec 19 2011 halt
Systemd
$ systemctl list-unit-files --type=service | head -10
UNIT FILE STATE
abrt-ccpp.service enabled
abrt-oops.service enabled
abrt-pstoreoops.service disabled
abrt-vmcore.service enabled
abrt-xorg.service enabled
abrtd.service enabled
accounts-daemon.service enabled
alsa-restore.service static
alsa-state.service static
Neuling
$ initctl list | head -10
avahi-daemon start/running, process 1090
mountall-net stop/waiting
nmbd start/running, process 2045
passwd stop/waiting
rc stop/waiting
rsyslog start/running, process 1088
tty4 start/running, process 1211
udev start/running, process 483
upstart-udev-bridge start/running, process 480
ureadahead-other stop/waiting
Referenzen
- SysVinit zu Systemd Cheatsheet
- Befehl zum Auflisten von Diensten, die beim Start gestartet werden?