Apache2 (Httpd) nie działa po aktualizacji do High Sierra

15

Mam problem polegający na tym, że Apache nie uruchamia się po aktualizacji do High Sierra 10.13.1. W dziennikach błędów nic się nie pokazuje, ale kiedy próbuję apachectl startnic się nie dzieje. Jeśli uruchomię apachectl configtest, otrzymam komunikat „Składnia OK

Użyłem poleceń jak sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plistbezskutecznie. Apache nie uruchomi się. Mogę biec sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.plisti to też nie działa.

Spojrzałem na listę usług parzenia i httpd pojawia się na liście wraz z innym procesem (mysql), ale status httpd pokazuje żółty „uruchomiony” zamiast zielonego.

Próbowałem wielu różnych rzeczy i stwierdzam, że jeśli zajrzę do pliku system.log, to znajdę com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

Po uruchomieniu apachectl start polecenie wydaje się działać, ale po uruchomieniu polecenia stop pojawia się komunikat „httpd (brak pliku pid) nie działa.
Otrzymuję również dane wyjściowe com.; Apple.xpc.launchd [1] ( org.apache.httpd): Przełącz się z OnDemand na KeepAlive.

Czy jest coś z High Sierra, które uniemożliwia uruchomienie Apache, gdy działało dobrze w Sierra?

Alcyeonnero
źródło
1
Miksujesz Apache httpd i Apache httpd firmy Apple (których demony uruchamiania uruchamiają różne pliki binarne)! Skąd bierzesz status httpd (tj. Żółty lub zielony wskaźnik)? Z jakiego przewodnika wstępnej konfiguracji korzystałeś?
klanomath
Nie mieszam ich, przechodziłem przez etapy próbowania zarówno naparu, jak i apache Apple, kiedy wykonuję listę brew services list' I receive a yellow indicator, I checked with all of the available users and ran usług parzenia`` i wszystkie pokazują ten sam wskaźnik. Jeśli chodzi o przewodnik instalacji, do skonfigurowania apache wykorzystano Ansible. Zostało to zrobione na 5 innych MacBookach, nadal działają w Sierra. Ten MacBook miał problem, a Apple przeprowadził diagnostykę i zresetował system operacyjny, jednocześnie aktualizując system do High Sierra
Alcyeonnero,
Mam na myśli mieszanie: masz co najmniej dwa zainstalowane pliki binarne apachectl i httpd (i dwa pliki konfiguracyjne). Zwykle preferowany jest apachectl naparowy (z powodu domyślnej zawartości zmiennej PATH twoje mogą się jednak różnić). Apachectl AFAIR brew nie uruchomi httpd Apple'a z domyślną opcją start (tj apachectl start.). To samo z ... configtest!
klanomath
Przez „Ansible został użyty do skonfigurowania apache” masz na myśli ten przewodnik: Mac Development Ansible Playbook ? Lepiej jest dodać link do / poradnika lub instrukcji konfiguracji. Różne przewodniki konfiguracji dla różnych wersji systemu macOS zawierają nieco inne konfiguracje / tworzą różne środowiska.
klanomath
Właśnie zaktualizowałem do High Sierra w ten weekend i mam dokładnie ten sam problem. Korzystałem z httpdformuły Homebrew , a teraz apache nie odpowiada. Kiedy to robię brew services list, dostaję również startedhttpd na żółto, a kiedy biegnę sudo apachectl stop, mówi mi tohttpd (pid 87?) not responding.
wonder95

Odpowiedzi:

16

Moim zdaniem ukryłeś różne demony / mechanizmy uruchamiania httpd, wykonując zbyt wiele poleceń powiązanych z httpd.

Po zainstalowaniu apache-httpd homebrew i homebrew oraz domyślnej ŚCIEŻKI masz sześć sposobów na uruchomienie httpd.

Apache firmy Apple:

  • sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • sudo /usr/sbin/apachectl start

Apache Homebrew:

  • sudo apachectl start
  • apachectl start
  • sudo brew services start httpd
  • brew services start httpd

Jeśli skopiowałeś plik homebrew.mxcl.httpd.plist ręcznie do ~ / Library / LaunchAgents / lub / Library / LaunchDaemons /, masz jeszcze dwie opcje, aby go uruchomić, ładując je (sudo) launchctl load ....

Jeśli nie zmodyfikowałeś plików konfiguracyjnych httpd lub skryptów apachectl, oddział Apple użyje pliku httpd.conf firmy Apple w katalogu / var i DocumentRoot w folderze / Library.

Gałąź homebrew używa podfolderów w / usr / local /.

Niektóre metody uruchamiania nie będą działać, jeśli powiążesz porty httpd z portami niższymi niż 1024!

Jeśli używasz (sudo) brew services ...do uruchomienia httpd, musisz użyć właściwego (sudo) brew services listpolecenia, aby sprawdzić status:

Jeśli uruchomisz go jako root, to wypisz go z uprawnieniami roota:

sudo brew services start httpd > sudo brew services list

lub z użytkownikami prywatnymi:

brew services start httpd> brew services list.


Aby rozwiązać problem, zwolnij httpd firmy Apple:

  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • usuń ręcznie zainstalowaną homebrew.mxcl.httpd.plist
  • zatrzymać dowolną usługę httpd homebrew (sudo) brew services stop httpd
  • zatrzymaj dowolny httpd uruchomiony przez apachectl:

    apachectl stop
    sudo apachectl stop
    sudo /usr/sbin/apachectl stop
    
  • Otwórz Monitor aktywności i sprawdź, czy nie działa żaden proces httpd.
  • Restart

Teraz - zakładając, że chcesz używać httpd homebrew na uprzywilejowanych portach - wpisz:

sudo brew services start httpd

Sprawdź udany początek z sudo brew services list.

klanomath
źródło
Podczas próby podanej przez Ciebie poprawki otrzymuję takie same dane wyjściowe jak ja. apachectl stopdostarcza dane wyjściowe, httpd (no pid file) not runninga kiedy uruchomię, sudo brew services httpd start sudo brew services list wskazuje apache2 (httpd) startedw kolorze żółtym. Kiedy próbuję uzyskać dostęp do czegokolwiek związanego ze stroną internetową, nie mogę. Zastanawiam się, czy aktualizacja 10.13 zmieniła coś w apache, uniemożliwiając jej uruchomienie.
Alcyeonnero,
14

Jeśli chodzi o homebrew httpd, jednym z problemów, na który ostatnio natknąłem, był stary pozostawiony plik httpd.pid, który uniemożliwiał uruchomienie httpd. Objawem było apachectl startpowiedzenie, że httpd już działa, ale tak nie było.

Bo tutaj był stary plik:

/usr/local/var/run/httpd/httpd.pid

Rozwiązaniem było usunięcie tego pliku pid, a następnie uruchomiono httpd.

Eduard Rozenberg
źródło
świetny! to jest mój problem, kiedy mój MBP decyduje, że nie obudzi się ze snu i muszę go ponownie włączyć.
frumbert
2
To rozwiązanie działało również w MacOS Mojave. Brew myślał, że Apache jest uruchomiony, ale httpdmonitor aktywności nie istniał . To naprawiło to.
Vahid Amiri,
Oszczędzało mi to wielu kłopotów!
SEJU,
To również działało dla mnie. Nie mogłem załadować żadnej witryny i ciągle otrzymywałem ERR_CONNECTION_REFUSED. Kiedy próbowałem wyświetlić listę usług, które były uruchomione brew services list, otrzymywałem żółty status „uruchomiony”, co oznaczało, że coś było nie tak z aktywnym statusem serwera. Usunięcie pid naprawiło to i teraz lista usług pokazuje aktywny status jako zielony „uruchomiony” zamiast tego teraz. Dziękuję Ci za to!
Mike Kormendy
Jeśli twój komputer zrestartował się w wyniku paniki jądra / przerwy w zasilaniu / itp., Prawdopodobnie jest to twój problem. Dzięki!
Dom Stubbs
2

Tak samo było po aktualizacji do High Sierra dzisiaj. Odkryłem, że następujące pliki apache zostały zastąpione nowymi wersjami. Na szczęście dla wszystkich tych plików istniał poprzedni plik PLIK ~ w tym samym folderze. Właśnie skopiowałem poprzednią wersję ~ z powrotem do oryginalnych, ponownie uruchomiłem apache i wszystko było w porządku.

W folderze /etc/apache2:

./httpd.conf
./extra/httpd-vhosts.conf
./extra/httpd-ssl.conf

Przykład:

cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf
Unmesh
źródło
W folderze /etc/apache2/extra/znajduje się około 10 plików z ~ poprzednimi dołączonymi do nich, jeśli wszystkie zostaną zmienione, lub tylko dwa wspomniane w /etc/apache2/extra/folderze
Alcyeonnero
Chciałbym zacząć od plików httpd.conf i httpd-vhosts.conf. Jeśli masz konfigurację SSL, musisz także zaktualizować httpd-ssl.conf. Reszta zależy od tego, czy zmieniłeś je wcześniej. Chciałbym użyć diff, aby sprawdzić, czy pliki się zmieniły, np. Diff httpd.conf httpd.conf ~ poprzedni na wszystkich innych plikach
Unmesh
Zacząłem od tych plików, które niczego nie zmieniły.
Alcyeonnero
1

Miałem ten sam problem

com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

Oznacza to, że httpd został nieprawidłowo zamknięty.

Następnie ręcznie uruchomiłem httpd, aby zobaczyć, na czym polega problem

> httpd
(13)Permission denied: AH00091: httpd: could not open error log file /usr/local/var/log/httpd/error_log.

Patrząc na uprawnienia, było całkiem jasne

> ll /usr/local/var/log/httpd/
total 96
-rw-r--r--  1 root  admin    242 15 apr 12:38 access_log
-rw-r--r--  1 root  admin  42062 20 jun 11:01 error_log

Myślę, że zacząłem httpd jako root, co spowodowało ten problem. Usunąłem pliki i później

brew services restart httpd

wszystko było w porządku.

Hans Pikkemaat
źródło
1

Wpadłem na to niedawno. Przyczyną jest to, że homebrew instaluje apache2 / httpd w folderach dostępnych dla użytkownika i działa jako użytkownik (uruchamiając polecenie: usługi brew start start httpd).

Brak działania jako zwykły użytkownik oznacza, że ​​httpd nie może nasłuchiwać na uprzywilejowanych portach (1024 i niższych).

Więc nawet jeśli httpd.conf jest skonfigurowany do nasłuchiwania 80 i 443, httpd nie może odbierać żądań przez te porty.

Osobliwością jest uruchomienie httpd przez uruchomienie polecenia: sudo apachectl start. To polecenie uruchamia httpd jako użytkownik root. Użytkownik root może nasłuchiwać na portach 80 i 443. httpd następnie przywraca uprawnienia do działania jako użytkownik _www.

Tak więc krótką odpowiedzią jest uruchomienie homebrew httpd na portach 80, a 443 to uruchomienie go za pomocą: sudo apachectl start. Możesz także rozpocząć od: sudo brew services start httpd. Brew poinformuje cię, że żąda pewnych folderów do rootowania, co, jak sądzę, jest w porządku, ale nie jest konieczne, ponieważ sudo apachectl start nie wymaga uprawnień do plików i / lub zmian właściciela.

Cezary
źródło
0

Sugerowałbym wręcz przeciwnie, co mówi HomeBrew, zawsze uruchamiaj httpd przez sudo. Tam, jeśli zrobisz ps -aef | grep httpd, zobaczysz, że jest na liście jako uruchomiony. Wykonanie bez sudo nie generuje danych wyjściowych ps, co może powodować błędne wrażenie, że httpd nie działa.

Nie jestem też pewien, czy w obu przypadkach są załadowane różne lub takie same konfiguracje. Zainstalowałem PHP i utworzyłem plik test.php z phpinfo w katalogu DocumentRoot. Jeśli uruchomisz apache z sudo, możesz zobaczyć phpinfo z localhost / test.php podczas korzystania z usług brew start httpd wyświetli błąd, jeśli DocumentRoot znajduje się w obszarze, w którym wymagany jest dostęp do roota.

Sebastian
źródło