Jak wyrejestrować „httpd” po „wfsctl stop”?

2

Jak właściwie wyrejestrować się httpdz uruchamiania przy ponownym uruchomieniu po a sudo wfsctl starti później sudo wfsctl stop?

Tło:

wfsctlto „narzędzie kontroli udostępniania plików WebDAV” wydane wraz z macOS High Sierra. wfsctlznajduje się na /usr/sbin/wfsctl.

W moim przypadku po pierwszej instalacji systemu macOS High Sierra httpddemon Apache początkowo nie wyświetla treści. (Spodziewano się.) Obserwacja, że ​​httpd nie służy, może być obserwowana na różne sposoby, w tym:

  • wpisz localhostw przeglądarce internetowej na tym samym komputerze
  • wpisz curl localhostterminal na tej samej maszynie.
curl localhost
# curl: (7) Failed to connect to localhost port 80: Connection refused

Przy pierwszym uruchomieniu wfsctlusługi WebDAV są httpdrównież uruchamiane.

sudo wfsctl start
# ... 
sudo wfsctl diagnose
# ... snip ...
# All httpd processes:
# COMM             RUSER             PPID   PID STARTED
# httpd            root                 1   885  4:18PM
# httpd            _www               885   890  4:18PM

Nic dziwnego, że uruchomiono Apache httpd. Chociaż bazowa httpdkonfiguracja Apache również zaczyna obsługiwać zawartość / Library / WebServer / Documents oprócz i niezależnie od jakichkolwiek udziałów WebDAV. W szczególności index.htmltreść jest zwracana za localhostpośrednictwem przeglądarki internetowej lub curl localhostaplikacji Terminal.

curl localhost --verbose
# * Connected to localhost (::1) port 80 (#0)
# > GET / HTTP/1.1
# > Host: localhost
# > User-Agent: curl/7.54.0
# > Accept: */*
# > 
# < HTTP/1.1 200 OK
# < Server: Apache/2.4.28 (Unix) mod_secure_transport/2.4.27
# < Content-Location: index.html.en
# <html><body><h1>It works!</h1></body></html>

Na koniec zatrzymaj usługi WebDAV za pomocą sudo wfsctl stop, a następnie uruchom ponownie. Po ponownym uruchomieniu httpdnajwyraźniej nadal działa:

# after `sudo wfsctl stop` and system reboot ...
curl localhost
# <html><body><h1>It works!</h1></body></html>

sudo wfsctl status
# disabled

sudo wfsctl diagnose
# ...
# WFS is not enabled.
# ...
# All httpd processes:
# COMM   RUSER  PPID   PID STARTED
# httpd  root      1    85  6:12PM
# httpd  _www     85   414  6:13PM

Przypis: Czy jest to uzasadnione oczekiwane zachowanie, które sudo wfsctl stop również się nie wyrejestrowujehttpd ?

Być może wfsctlzakłada się, że nie ingeruje w inne usługi, z którymi można by uruchomić httpdserwer WWW? (Chociaż w moim przypadku użycia httpdnie zostało włączone w żaden inny sposób niż wfsctl.)

l - marc l
źródło

Odpowiedzi:

1

Jak zauważono w pytaniu, sudo wfsctl stopnie zatrzymuje i nie rejestruje httpdprocesu. Jednak httpddemony są zatrzymywane i ponownie uruchamiane. Ponadto, httpdpozostaje znakiem do rozpoczęcia następnego (re) buta.

sudo wfsctl diagnose
# All httpd processes:
# COMM   RUSER   PPID   PID STARTED
# httpd  root       1   325  8:46PM
# httpd  _www     325   331  8:46PM
sudo wfsctl stop
sudo wfsctl diagnose
# All httpd processes:
# COMM    RUSER  PPID   PID STARTED
# httpd   root      1   399 10:19PM
# httpd   _www    399   403 10:19PM

man wfsctlWspomina, że stosowanie httpd-wrapperjest korzystne do zastosowania apachectli httpd(przynajmniej dla -tflagi testowym).

Plik konfiguracyjny Apache do udostępniania plików WebDAV jest sparametryzowany, a serwerem httpd zarządza httpd-wrappernarzędzie, które przekazuje parametry httpd. Zwykle jest to przezroczyste, ale pamiętaj, że aby sprawdzić składnię pliku konfiguracyjnego Apache, nie używaj apachectl configtestlub httpd -t. Zamiast tego użyj httpd-wrapper -t.

Ogólnie rzecz biorąc, opcje pokazane na man httpdstronie można przekazać do /usr/sbin/httpd-wrapperskryptu ruby. Większość opcji działa zgodnie z oczekiwaniami.

Jednak sudo httpd-wrapper -k graceful-stopzachowuje się jak resecie który restartuje httpddemony i pozostawia httpdzarejestrowanym aby ponownie uruchomić podczas uruchamiania systemu.

Wreszcie sudo apachectl graceful-stopstwierdzono, że zatrzymał i wyrejestrował httpdprocesy.

Tak więc następująca sekwencja poleceń zatrzyma zarówno wfsctludostępnianie WebDAV, jak i httpddemony w bieżącej High Sierra.

sudo wfsctl stop
# Unloaded and removed: org.apache.httpd.webdavfilesharing.username-275.49176.plist
sudo apachectl graceful-stop
# verify
sudo wfsctl diagnose

Zobacz „Jak skonfigurować wfsctlWebDAV do pracy z aplikacją korzystającą z podstawowego uwierzytelnienia?” dla pełniejszego przykładu WebDAV.

l - marc l
źródło