Systemd

使用 systemd 更改網路後重新載入 apache

  • October 25, 2017

我有一個在 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"

進一步閱讀

引用自:https://unix.stackexchange.com/questions/400220