Antworten:
Die meisten Benutzer führen ihren httpd (Apache, Nginx usw.) über ein Init-System aus. Dies ist mit ziemlicher Sicherheit der Fall, wenn Sie von einem Paket aus installiert haben. Bei fast allen dieser Init-Systeme funktioniert eine Methode, wenn sie ausgeführt wird. In meinem Fall verwende ich nginx, das ein Init-Skript im SysV-Stil enthält und ein status
Argument wie das folgende akzeptiert :
$ /etc/init.d/nginx status
* nginx is running
Wenn Sie ein anderes httpd-, script- oder init-System ausführen, haben Sie natürlich eine etwas andere Syntax, aber es sei denn, Sie starten den httpd manuell (was sich wie die schlechteste Idee der Welt anfühlt) wahrscheinlich mit einem netten, verwalteten Startskript, mit dem Sie den Status abfragen können.
In der Antwort von slm geht es mehr um diese Art der Init-Abfrage, aber das Problem mit der Vertrauenswürdigkeit ist, dass Sie nur wirklich wissen, ob ein Prozess noch ausgeführt wird. Der Hauptprozess Ihres httpd könnte ausgeführt werden, ist 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 am Port *:80
, aber wenn nicht, können Sie den Code nach dem Code anpassen. Hier habe ich nur awk
die Ausgabe von, um netstat
zu sehen, ob es auf dem 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 überprüfen, welcher Prozess ebenfalls ausgeführt wird, um sicherzustellen, dass der richtige httpd ausgeführt wird. Wir könnten alle möglichen Kontrollen durchführen. Kommt drauf an, wie paranoid du sein willst :)
Aber auch das ist nur ein Spiegelbild eines httpd. Willst du es wirklich testen? Nun, lass es uns testen .
$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200
Ich schaue mir nur den Antwortcode an (200 bedeutet "A-Okay!"), Aber wir könnten die Ausgabe erneut untersuchen und testen, um sicherzustellen, dass sie korrekt generiert wird.
Aber auch das ist nicht so gründlich. Sie prüfen localhost
und es werden 200 gemeldet, nichts falsch? Was ist, wenn Biber über das Netzwerkkabel kauten, das den httpd liefert (aber nicht den Rest des Systems)? Dann was?! Sie melden die Verfügbarkeit, wenn Sie tatsächlich nicht erreichbar sind. Nur wenige Dinge sehen unprofessioneller aus als falsche Statusdaten.
Sprechen wir also mit einem externen Server (idealerweise über eine völlig andere Verbindung, in einer anderen weit entfernten Galaxie) und bitten Sie ihn, unseren Server abzufragen:
$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200
Zu diesem Zeitpunkt handelt es sich bei allen gemeldeten Problemen entweder um In-App-Probleme (die ihre eigene Fehlerbehandlung und -meldung haben können, oder sie sind am Ende des Clients).
Eine Kombination dieser Tests kann dabei helfen, das Problem zu beheben.
Sie können den Befehl services auf den meisten Linux-Distributionen universell verwenden.
$ service <service> status
$ 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...
...
Wenn Sie eines der typischeren Service-Management-Frameworks verwenden, können Sie die Services 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
Emporkömmling
$ 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