CentOs 7:如果HTTP侦听特定的IP地址,它将不会在启动时启动

我在我的httpd.conf中有这个:

Listen 216.XX.YY.ZZZZ:80 

只是为了确保,我确保在启动时启用httpd:

 systemctl httpd enable 

系统启动时 ,我有:

 systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Thu 2017-02-23 22:21:03 PST; 8min ago Process: 719 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE) Main PID: 719 (code=exited, status=1/FAILURE) Feb 23 22:21:00 centosXXXXXX.aspadmin.net systemd[1]: Starting The Apache HTTP Server... Feb 23 22:21:03 centosXXXXXX.aspadmin.net httpd[719]: (99)Cannot assign requested address: AH00072: make_sock: could not bind to address 216.XX.YY.XXX:80 Feb 23 22:21:03 centosXXXXXX.aspadmin.net httpd[719]: no listening sockets available, shutting down Feb 23 22:21:03 centosXXXXXX.aspadmin.net httpd[719]: AH00015: Unable to open logs Feb 23 22:21:03 centosXXXXXX.aspadmin.net systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE Feb 23 22:21:03 centosXXXXXX.aspadmin.net systemd[1]: Failed to start The Apache HTTP Server. Feb 23 22:21:03 centosXXXXXX.aspadmin.net systemd[1]: Unit httpd.service entered failed state. Feb 23 22:21:03 centosXXXXXX.aspadmin.net systemd[1]: httpd.service failed. 

然后我可以通过运行来启动它:

 systemctl start httpd 

一切正常

 systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2017-02-23 22:31:53 PST; 3s ago Main PID: 2804 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─2804 /usr/sbin/httpd -DFOREGROUND ├─2805 /usr/sbin/httpd -DFOREGROUND ├─2806 /usr/sbin/httpd -DFOREGROUND ├─2808 /usr/sbin/httpd -DFOREGROUND ├─2824 /usr/sbin/httpd -DFOREGROUND └─2831 /usr/sbin/httpd -DFOREGROUND Feb 23 22:31:53 centosXXXXXX.aspadmin.net systemd[1]: Starting The Apache HTTP Server... Feb 23 22:31:53 centosXXXXXX.aspadmin.net httpd[2804]: AH00558: httpd: Feb 23 22:31:53 centosXXXXXX.aspadmin.net systemd[1]: Started The Apache HTTP Server. Hint: Some lines were ellipsized, use -l to show in full. 

使用/etc/sysconfig/network-scripts/ifcfg-eth0的普通networking脚本将IP分配给/etc/sysconfig/network-scripts/ifcfg-eth0

检查/lib/systemd/system/httpd.service我有:

 [Unit] Description=The Apache HTTP Server After=network.target remote-fs.target nss-lookup.target 

网上唯一的类似问题在这里: https : //unix.stackexchange.com/questions/207063/apache-httpd-failing-to-start-on-boot-centos-7然而,他们的build议:

 systemctl enable NetworkManager-wait-online.service Failed to execute operation: No such file or directory 

似乎没有工作。

我完全迷失了。

事实certificate,您需要使用NetworkManager才能正常工作,因为您希望等待IP 实际可用。 在CentOS 7中默认情况下没有安装NetworkManager。

所以:

 # yum install NetworkManager 

启用它:

 systemctl enable NetworkManager-wait-online 

然后:

 # systemctl edit httpd.service 

并添加:

 After=network.target NetworkManager-wait-online.service remote-fs.target nss-lookup.target 

此时,HTTPD只有在IP被分配给接口和宾果时才会启动,它实际上会启动。