OSX jak pokazać status apache w terminalu?

11

Zauważyłem, że na moim serwerze z linuksem, gdy piszę, uruchom ponownie apachectl, daje mi niewiele, ale pomocne informacje zwrotne, takie jak restartingwtedy [ok]i [fail]na końcu linii. Niewiele, ale przynajmniej wiem, co się dzieje i mogę sprawdzić dzienniki.

Na moim OS X nic nie dostaję. natychmiast następny wiersz:

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

Jak mogę włączyć te funkcje „debugowania”?

mgPePe
źródło
Nie znam OS X, ale możesz edytować skrypt init, aby dodać echolinię.
kwanty
gdzie jest ten skrypt? i do której linii mam dodać echo? Przepraszam, jestem nowy i potrzebuję szczegółów: \
mgPePe
Nie jestem facetem z OS X, ale być może jest to zgodne z filozofią uniksową, zgodnie z którą „brak wiadomości to dobra wiadomość” i zaczyna cię nękać tylko wtedy, gdy coś jest nie tak?
Janne Pikkarainen,
hmm ciche błędy nie pomagają, więc tak naprawdę nie jestem fanem
mgPePe
Proszę zamieścić treść /usr/sbin/apachectl.
kwanty

Odpowiedzi:

5

Co powiesz na skrypt otoki apachectl, który umieścisz na końcu coś takiego?

tail -5 /var/log/httpd/error_log

powinieneś zobaczyć coś takiego podczas normalnego uruchamiania

  • [Pt 22 kwietnia 23:39:20 2011] [zawiadomienie] Podsumowanie: generowanie sekretu dla
    uwierzytelnienia streszczenia ...
  • [Pt 22 kwietnia 23:39:20 2011] [zawiadomienie] Podsumowanie: gotowe
  • [Pt 22 kwietnia 23:39:20 2011] [ostrzeżenie] plik pid
    /mlk/apache/pid/httpd.pid nadpisany - Nieczyste zamknięcie poprzedniego uruchomienia Apache?
  • [Pt 22 kwietnia 23:39:20 2011] [zawiadomienie] Konfiguracja Apache / 2.0.63 (Unix) DAV / 2 - wznowienie normalnej pracy

W przeciwnym razie każdy błąd powinien być przynajmniej częściowo pokazany tutaj. Kluczowe zdanie znajduje się powyżej.

Dodatkowo: / usr / sbin / apachectl jest własnością root, musisz być uprzywilejowanym użytkownikiem, aby to zrobić. sudo vi / usr / sbin / apachectl

przejdź na koniec pliku i wstaw go między wierszami „esac” i „exit $ ERROR”. to znaczy.

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

Zauważ, że to wydrukuje kilka ostatnich wierszy, bez względu na to, co zrobisz ze skryptem, przestań, uruchom ponownie. możesz umieścić go tylko w części początkowej instrukcji przypadku.

Michael Henry
źródło
To brzmi jak możliwe rozwiązanie. Jak mogę go dołączyć, aby automatycznie uruchamiał się przy każdym poleceniu restartu?
mgPePe
Musiałem ssh na moim serwerze macos w domu, aby spojrzeć na / usr / bin / apachectl Spójrz w powyższej odpowiedzi dodałem polecenia do edycji pliku.
Michael Henry
30

Mam ten sam problem na moim komputerze Mac. Kiedykolwiek próbuję uruchomić apache i nic się nie dzieje, natychmiast uruchamiam to polecenie. W moim przypadku problemem zawsze wydają się być pliki konfiguracyjne apache.

apachectl configtest
Randy Findley
źródło
Dzięki za to. Sam napotkałem ten problem i okazało się, że aktualizacja homebrew SQLite spowodowała, że ​​homebrew PHP wywołało błąd Apache, który nie pojawił się nigdzie indziej niż w configtest.
AlexMax
Dziekuję Dziekuję Dziękuję!!! To właśnie uratowało mi zdrowie psychiczne !!!
I wreszcie
1
krótka wersja tego polecenia toapachectl -t
equiman 11.04.17
To polecenie powie ci, czy konfiguracja Apache httpd (httpd.conf) jest wolna od błędów składniowych. Aby sprawdzić, czy proces jest uruchomiony, możesz uruchomić „htop”, a następnie F4, aby przefiltrować „httpd”, aby zobaczyć wszystkie procesy odradzane przez httpd.
Puneet Lamba
8

apachectlna Macu znajduje się opakowanie wokół niektórych launchctlpoleceń (wystarczy zajrzeć do pliku). Niestety, launchctl nie wychodzi z kodem błędu, gdy coś idzie nie tak z uruchomieniem httpd, więc skrypt nie ma łatwego sposobu na wyświetlenie czegokolwiek, nawet jeśli spróbuje.

Podstawowa kontrola, którą możesz wykonać samodzielnie, to sprawdzenie istnienia procesów Apache po apachectl startkomendzie.

ps aux | grep httpd
Sven
źródło
w pewnym sensie mówisz: „nie ma takich informacji debugowania, które można ustawić na Macosxie, ale w ten sposób możesz sprawdzić, czy serwer apache działa”, prawda?
mgPePe
Tak, o to chodzi.
Sven
0

W systemie macOS z netstatpoleceniem wyświetl całe połączenie sieciowe. Możesz filtrować tylko połączenia „nasłuchuj” i przeglądać serwery http (s).

Możesz utworzyć plik bash z tym kodem:

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

Rezultatem zatrzymania serwera sudo apachectl -k stopbędzie:

Apache server is not running

Wynik podczas działania serwera sudo apachectl -k stopbędzie:

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

W tym przykładzie mam dwa serwery, jeden z https i drugi z http.

Equiman
źródło