
作業系統:macOS Mojave 10.14.6
HTTP 伺服器:Apache 2.4.55
當嘗試重新啟動 apache 伺服器時,我收到“地址已在使用中...”訊息。嗯,所以一定有一個進程監聽該端口,對吧?在終端機中使用此行(來自其他地方)查看發生了什麼:
ps auxw | grep httpd
它給
_www 1317 0.0 0.1 4361716 7452 ?? S 12:39AM 0:00.10 /usr/sbin/httpd -D FOREGROUND
_www 1303 0.0 0.1 4361716 7364 ?? S 12:39AM 0:00.23 /usr/sbin/httpd -D FOREGROUND
root 104 0.0 0.1 4359628 5956 ?? Ss 12:20AM 0:01.07 /usr/sbin/httpd -D FOREGROUND
ausername 7671 0.0 0.0 4277256 804 s003 S+ 12:21PM 0:00.00 grep httpd
_www 7654 0.0 0.0 4359604 1004 ?? S 12:21PM 0:00.00 /usr/sbin/httpd -D FOREGROUND
是的,所以現在我嘗試阻止它
httpd -k stop
這使
httpd (no pid file) not running
好的,然後我嘗試用
/usr/sbin/httpd -k stop
httpd (pid 104?) not running
嗯...也許:
apachectl -k stop
httpd (no pid file) not running
那什麼在運行呢?我該如何重新啟動它?這是我第一次在 OSX 上處理有關 Apache 的此類錯誤。
我查過這個線程但對我來說沒有任何作用。使用grep -ri listen /etc/apache2
我得到了多個列表Listen: 80
,但所有這些都位於帶有 .bak、.original、~previous、.pre-update 的 httpd.conf 檔案中。除了用於 httpd 的一個之外的所有其他。我怎麼知道?httpd -V
這使:
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/opt/local"
-D SUEXEC_BIN="/opt/local/bin/suexec"
-D DEFAULT_PIDLOG="var/run/apache2/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="etc/apache2/httpd.conf"
最後一個文件有這些行:
Listen 8080
Listen 80
所以現在我沒有主意了。
PS:深入研究日誌後,現在這是一個明顯的跡象,表明我安裝了多個 Apache(可能是 Homebrew 安裝的剩餘部分)。這兩行:
[Fri Feb 17 00:22:56.067511 2023] [mpm_prefork:notice] [pid 104] AH00163: Apache/2.4.46 (Unix) PHP/7.3.33 LibreSSL/2.5.5 configured -- resuming normal operations
[Fri Feb 17 00:22:56.067613 2023] [core:notice] [pid 104] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
httpd -v
第一行說它正在運行 Apache/2.4.46,但這不是我運行時得到的版本。該命令列可能位於哪裡?與啟動過程有關,對嗎?