Come annullare la registrazione di "httpd" dopo "wfsctl stop"?

2

Come si può correttamente annullare la registrazione di httpd dal riavvio al riavvio dopo un sudo wfsctl start e successivi sudo wfsctl stop ?

Sfondo:

wfsctl è una "utility di controllo per la condivisione di file WebDAV" rilasciata con macOS High Sierra. wfsctl si trova in /usr/sbin/wfsctl .

Nel mio caso, dopo un'installazione iniziale di macOS High Sierra, il daemon di apache httpd non sta inizialmente servendo il contenuto. (Questo era previsto). L'osservazione che httpd non stava servendo poteva essere osservata in vari modi, tra cui:

  • digita localhost in un browser web sulla stessa macchina
  • digita curl localhost nel terminale sulla stessa macchina.
curl localhost
# curl: (7) Failed to connect to localhost port 80: Connection refused

Quando i servizi WebDAV wfsctl vengono avviati per la prima volta, viene avviato anche httpd .

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

Non è sorprendente che sia stato avviato un% co_de di Apache. Sebbene, la configurazione di base Apache httpd inizi anche a servire i contenuti di / Library / WebServer / Documents in aggiunta e separati da qualsiasi condivisione WebDAV. In particolare, il contenuto di httpd viene restituito tramite index.html in un browser Web o localhost nell'applicazione Terminale.

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>

Infine, interrompi i servizi WebDAV con curl localhost , quindi riavvia. Dopo il riavvio, sudo wfsctl stop apparentemente è ancora in esecuzione:

# 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

Nota: È un comportamento ragionevolmente previsto che httpd non cancelli anche sudo wfsctl stop ?

Forse httpd presume di non interferire con altri servizi con potrebbe essere utilizzato per avviare il server web wfsctl ? (Anche se, nel mio caso d'uso, httpd non è stato abilitato con altri mezzi rispetto a httpd .)

    
posta l --marc l 06.02.2018 - 03:24
fonte

1 risposta

1

Come indicato nella domanda, sudo wfsctl stop non si ferma e annulla la registrazione del processo httpd . Tuttavia, i daemon httpd vengono arrestati e riavviati. Inoltre, httpd rimane registrato per iniziare al successivo (re) avvio.

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

Il man wfsctl indica che l'uso di httpd-wrapper è preferito all'uso di apachectl e httpd (almeno per il flag di prova -t .)

The Apache config file for WebDAV File Sharing is parameterized, and the httpd server is managed by the httpd-wrapper utility, which passes parameters to httpd. This is normally transparent, but note that to check the Apache config file syntax, do not use apachectl configtest or httpd -t. Instead, use httpd-wrapper -t.

In generale, le opzioni mostrate nella pagina man httpd possono essere passate allo script /usr/sbin/httpd-wrapper ruby. La maggior parte delle opzioni funziona come previsto.

Tuttavia, sudo httpd-wrapper -k graceful-stop si comporta come un reset che riavvia i daemon httpd e lascia httpd registrato per avviarsi quando il sistema si riavvia.

Infine, è stato trovato che sudo apachectl graceful-stop interrompe e annulla la registrazione dei processi httpd .

Quindi, la seguente sequenza di comandi interromperà sia la condivisione wfsctl WebDAV che i daemon httpd sulla corrente High Sierra.

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

Vedi " Come impostare wfsctl WebDAV da utilizzare con un'applicazione che utilizza l'autenticazione di base? " per un esempio WebDAV più completo.

    
risposta data 15.02.2018 - 07:45
fonte

Leggi altre domande sui tag