Systemd
使用 systemd 更改網路後重新載入 apache
我有一個在 Hyper-V 中執行的 Fedora 25 虛擬機。此 VM 用於在 Apache 上執行的 PHP 應用程序。它是最新的和執行庫存的一切。
在 Apache 中執行時連接到遠端網站的簡單 php 腳本失敗,但在命令行中執行良好:
$host='tcp://www.shinyandnew.ca/'; $socket = stream_socket_client($host, $errno, $errstr, 10, STREAM_CLIENT_CONNECT, stream_context_create()); if (!$socket) { print ("Unable to connect to ${host}: ${errno} ${errstr}\n"); } else { print ("Connected to ${host} successfully \n"); fclose($socket); }
錯誤是
php_network_getaddresses:getaddrinfo 失敗:名稱或服務未知
但是,VM 可以訪問網路,並且在 php 命令行中一切正常。這表明這是一個 Apache 問題。另外:如果我重新啟動 Apache,問題就會消失。
因此我的問題是:
重啟後如何強制 Apache 正確解析名稱?如果我需要在每次網路更改後重新載入 Apache,這對於這個安裝是可以接受的(它是一個開發工作站):我如何自動觸發它以便它在啟動時工作?有沒有一種系統方法可以做到這一點?
您不需要觸發重新載入或重新啟動。您只需要確保 Apache 在
/etc/resolv.conf
被引導程序中執行的任何操作編寫之前不會啟動。PHP 錯誤跟踪器的建議是使用 systemd 覆蓋文件添加一個After=
副檔名,命名相關服務到httpd.service
:cd /etc/systemd/system/ 安裝 -m 0755 -d httpd.d echo >> httpd.d/after.conf "[單位]" echo >> httpd.d/after.conf "After=network.service systemd-networkd.service network-online.target"
進一步閱讀
- 伊馬圖爾 (2017-04-20)。 *stream_socket_client 在沒有主機條目*的情況下失敗。錯誤 #74483。PHP 錯誤跟踪器。