OSX Wie wird der Apache-Status im Terminal angezeigt?

11

Ich habe festgestellt, dass auf meinem Linux-Server, wenn ich apachectl restart eingebe, ich wenig, aber hilfreiches Feedback bekomme, wie restartingund dann [ok]oder [fail]am Ende der Zeile. Nicht viel, aber zumindest weiß ich, was los ist, und ich kann Protokolle überprüfen.

Auf meinem OS X bekomme ich nichts. nur die nächste Zeile sofort:

sh-3.2# /usr/sbin/apachectl stop   
sh-3.2# /usr/sbin/apachectl start
sh-3.2# 

Wie kann ich diese Debug-Funktionen aktivieren?

mgPePe
quelle
Ich bin mit OS X nicht vertraut, aber Sie können das Init-Skript bearbeiten, um eine echoZeile hinzuzufügen .
Quanten
Wo ist das Skript? und zu welcher Zeile soll ich hinzufügen echo? Entschuldigung, ich bin neu in der
Nähe
Ich bin kein OS X-Typ, aber vielleicht folgt es einfach der Unix-Philosophie "Keine Nachrichten sind gute Nachrichten" und fängt an, Sie nur zu nerven, wenn etwas nicht stimmt?
Janne Pikkarainen
hmm stille Fehler helfen nicht, also bin ich nicht wirklich ein Fan
mgPePe
Bitte posten Sie den Inhalt von /usr/sbin/apachectl.
Quanten

Antworten:

5

Wie wäre es mit dem Apachectl-Wrapper-Skript, das Sie am Ende so etwas anbringen.

tail -5 /var/log/httpd/error_log

Sie sollten so etwas in einem normalen Start sehen

  • [Fri Apr 22 23:39:20 2011] [Hinweis] Digest: Generieren eines Geheimnisses für die
    Digest-Authentifizierung ...
  • [Fri Apr 22 23:39:20 2011] [Notiz] Digest: fertig
  • [Fri Apr 22 23:39:20 2011] [warn]
    PID- Datei /mlk/apache/pid/httpd.pid überschrieben - Unreines Herunterfahren des vorherigen Apache-Laufs?
  • [Fri Apr 22 23:39:20 2011] [Hinweis] Apache / 2.0.63 (Unix) DAV / 2 konfiguriert - Wiederaufnahme des normalen Betriebs

Andernfalls sollte ein Fehler zumindest teilweise hier angezeigt werden. Der Schlüsselbegriff ist oben hervorgehoben.

Zusätzlich: / usr / sbin / apachectl gehört root. Sie müssen ein privilegierter Benutzer sein, um dies zu tun. sudo vi / usr / sbin / apachectl

Gehen Sie zum Ende der Datei und fügen Sie diese zwischen die Zeilen "esac" und "exit $ ERROR" ein. dh.

esac
sleep 2; tail -5 /var/log/httpd/error_log
exit $ERROR

Beachten Sie, dass dadurch die letzten Zeilen gedruckt werden, unabhängig davon, welche Aktion Sie mit dem Skript ausführen. Stoppen Sie den Start und starten Sie den Computer neu. Möglicherweise möchten Sie es nur in den Anfangsteil der case-Anweisung einfügen.

Michael Henry
quelle
Das klingt nach einer möglichen Lösung. Und wie könnte ich es anhängen, damit es bei jedem Neustartbefehl automatisch ausgeführt wird?
mgPePe
Musste zu Hause auf meinem MacOS-Server ssh, um / usr / bin / apachectl zu sehen. In der obigen Antwort habe ich die Befehle zum Bearbeiten der Datei hinzugefügt.
Michael Henry
30

Ich habe das gleiche Problem auf meinem Mac. Immer wenn ich versuche, Apache zu starten und nichts passiert, führe ich diesen Befehl sofort aus. In meinem Fall scheint das Problem immer in den Apache-Konfigurationsdateien zu liegen.

apachectl configtest
Randy Findley
quelle
Danke dafür. Ich bin selbst auf dieses Problem gestoßen und habe festgestellt, dass ein Update auf Homebrew SQLite dazu führte, dass Homebrew PHP einen Apache-Fehler auslöste, der nur in Configtest auftauchte.
AlexMax
Danke danke danke!!! Das hat gerade meine geistige Gesundheit gerettet !!!
Und schließlich
1
Kurzversion dieses Befehls istapachectl -t
Equiman
8

apachectlAuf dem Mac gibt es einen Wrapper um einige launchctlBefehle (schauen Sie einfach in die Datei). Leider wird launchctl nicht mit einem Fehlercode beendet, wenn beim Starten etwas schief geht httpd, sodass das Skript keine einfache Möglichkeit hat, etwas anzuzeigen, selbst wenn es dies versucht.

Eine grundlegende Überprüfung, die Sie selbst durchführen können, besteht darin, die Existenz von Apache-Prozessen nach dem apachectl startBefehl zu überprüfen .

ps aux | grep httpd
Sven
quelle
In gewisser Weise sagen Sie: "Es gibt keine solchen Debug-Informationen, die Sie auf Macosx festlegen können, aber auf diese Weise können Sie überprüfen, ob der Apache-Server ausgeführt wird."
mgPePe
Ja, das war's auch schon.
Sven
0

Unter macOS mit netstatBefehl wird die gesamte Netzwerkverbindung angezeigt. Sie können nur "Listen" -Verbindungen filtern und die http (s) -Server anzeigen.

Mit diesem Code können Sie eine Bash-Datei erstellen:

status="$(netstat -at | grep LISTEN | grep *.http)"
count="$(echo "${status}" | grep -Ev "^$" | wc -l)"

if [ ${count} -eq 0 ] ; then
    echo " Apache server is not running"
fi   

echo "${status}" | 
while IFS= read -r line
do
    echo " ${line}"
done

Das Ergebnis beim Stoppen des Servers ist sudo apachectl -k stop:

Apache server is not running

Das Ergebnis bei laufendem Server ist sudo apachectl -k stop:

tcp46      0      0  *.https                *.*                    LISTEN     
tcp46      0      0  *.http                 *.*                    LISTEN     

In diesem Beispiel werden zwei Server ausgeführt, einer mit https und einer mit http.

Equiman
quelle