httpd.service 的作业失败,因为控制进程退出并显示错误代码。有关详细信息,请参阅 "systemctl status httpd.service" 和 "journalctl -xe"
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details
我安装了全新的Centos 7。然后我重新启动了Apache,但Apache 无法启动。我在这个问题上停留了 3 天。连支持都搞不清楚错误
sudo service httpd start
Failed to start apache :
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2016-05-09 16:08:02 BST; 59s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 5710 (code=exited, status=1/FAILURE)
May 09 16:08:02 mike079.startdedicated.de systemd[1]: Starting The Apache HTTP Server...
May 09 16:08:02 mike079.startdedicated.de httpd[5710]: (98)Address already in use: AH00072: make_sock: could not bind to address 85.25.12.20:80
May 09 16:08:02 startdedicated.de httpd[5710]: no listening sockets available, shutting down
May 09 16:08:02 startdedicated.de httpd[5710]: AH00015: Unable to open logs
May 09 16:08:02 startdedicated.de systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
May 09 16:08:02.startdedicated.de kill[5712]: kill: cannot find process ""
May 09 16:08:02 .startdedicated.de systemd[1]: httpd.service: control process exited, code=exited status=1
May 09 16:08:02startdedicated.de systemd[1]: Failed to start The Apache HTTP Server.
May 09 16:08:02 startdedicated.de systemd[1]: Unit httpd.service entered failed state.
May 09 16:08:02 mike: httpd.service failed.
从你的输出:
no listening sockets available, shutting down
基本上意味着,一个 apache 将要侦听的任何端口已经被另一个应用程序使用。
netstat -punta | grep LISTEN
将为您提供所有正在使用的端口的列表以及识别哪个进程所需的信息,以便您可以 kill
stop
或使用它做任何您想做的事情。
在对你的 ip 进行 nmap
之后,我可以看到
80/tcp open http
所以我猜你已经解决了。
在我的例子中,我收到错误仅仅是因为我在文件中将 Listen 80 更改为 listen 443
/etc/httpd/conf/httpd.conf
因为我已经使用 yum 命令安装了 mod_ssl
yum -y install mod_ssl
在 mod_ssl
安装期间创建的文件 ssl.conf
中存在重复的 listen 443 指令。
如果你有重复的 listen 80 或 443,你可以通过 运行 下面的命令在 linux centos (My linux)
中验证这一点
grep '443' /etc/httpd/conf.d/*
下面是示例输出
/etc/httpd/conf.d/ssl.conf:Listen 443 https
/etc/httpd/conf.d/ssl.conf:<VirtualHost _default_:443>
/etc/httpd/conf.d/ssl.conf:#ServerName www.example.com:443
只需将 httd.conf 中的 listen 443 还原为 listen 80 即可解决我的问题。
<VirtualHost *:80>
ServerName www.YOURDOMAIN.COM
ServerAlias YOURDOMAIN.COM
DocumentRoot /var/www/YOURDOMAIN.COM/public_html
ErrorLog /var/www/YOURDOMAIN.COM/error.log
CustomLog /var/www/YOURDOMAIN.COM/requests.log combined
DocumentRoot /var/www/YOURDOMAIN.COM/public_html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/YOURDOMAIN.COM/public_html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
在命令行上输入 journalctl -xe
,结果将是
SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port 83 or 80
这意味着 SELinux 运行正在您的机器上运行,您需要禁用它。然后通过键入以下内容编辑配置文件
nano /etc/selinux/config
然后找到SELINUX=enforce
这一行,改成SELINUX=disabled
然后输入下面的命令和运行启动httpd
的命令
setenforce 0
最后启动服务器
systemctl start httpd
由于 vhost.conf 中的一个简单拼写错误,我遇到了同样的错误。
请记住确保配置文件中没有任何错误。
apachectl configtest
允许 Apache 通过防火墙
允许默认的 HTTP 和 HTTPS 端口,端口 80 和 443,通过 firewalld:
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
并重新加载防火墙:
sudo firewall-cmd --reload
一些其他服务可能正在使用端口 80:尝试停止其他服务:HTTPD、SSL、NGINX、PHP,使用命令 sudo systemctl stop 和然后使用命令 sudo systemctl start httpd
错误可能在任何地方、配置、库或二进制文件。控制过程中的错误是系统无法 start/restart 服务时抛出的一般错误。在我的例子中,链接到 .service 文件中的 exe 的库之一有问题。修复该库解决了问题。
尝试使用此cmd 了解缺少的配置或文件配置中的错误
$ apachectl 配置测试
我安装了全新的Centos 7。然后我重新启动了Apache,但Apache 无法启动。我在这个问题上停留了 3 天。连支持都搞不清楚错误
sudo service httpd start
Failed to start apache :
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2016-05-09 16:08:02 BST; 59s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 5710 (code=exited, status=1/FAILURE)
May 09 16:08:02 mike079.startdedicated.de systemd[1]: Starting The Apache HTTP Server...
May 09 16:08:02 mike079.startdedicated.de httpd[5710]: (98)Address already in use: AH00072: make_sock: could not bind to address 85.25.12.20:80
May 09 16:08:02 startdedicated.de httpd[5710]: no listening sockets available, shutting down
May 09 16:08:02 startdedicated.de httpd[5710]: AH00015: Unable to open logs
May 09 16:08:02 startdedicated.de systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
May 09 16:08:02.startdedicated.de kill[5712]: kill: cannot find process ""
May 09 16:08:02 .startdedicated.de systemd[1]: httpd.service: control process exited, code=exited status=1
May 09 16:08:02startdedicated.de systemd[1]: Failed to start The Apache HTTP Server.
May 09 16:08:02 startdedicated.de systemd[1]: Unit httpd.service entered failed state.
May 09 16:08:02 mike: httpd.service failed.
从你的输出:
no listening sockets available, shutting down
基本上意味着,一个 apache 将要侦听的任何端口已经被另一个应用程序使用。
netstat -punta | grep LISTEN
将为您提供所有正在使用的端口的列表以及识别哪个进程所需的信息,以便您可以 kill
stop
或使用它做任何您想做的事情。
在对你的 ip 进行 nmap
之后,我可以看到
80/tcp open http
所以我猜你已经解决了。
在我的例子中,我收到错误仅仅是因为我在文件中将 Listen 80 更改为 listen 443
/etc/httpd/conf/httpd.conf
因为我已经使用 yum 命令安装了 mod_ssl
yum -y install mod_ssl
在 mod_ssl
安装期间创建的文件 ssl.conf
中存在重复的 listen 443 指令。
如果你有重复的 listen 80 或 443,你可以通过 运行 下面的命令在 linux centos (My linux)
中验证这一点grep '443' /etc/httpd/conf.d/*
下面是示例输出
/etc/httpd/conf.d/ssl.conf:Listen 443 https
/etc/httpd/conf.d/ssl.conf:<VirtualHost _default_:443>
/etc/httpd/conf.d/ssl.conf:#ServerName www.example.com:443
只需将 httd.conf 中的 listen 443 还原为 listen 80 即可解决我的问题。
<VirtualHost *:80>
ServerName www.YOURDOMAIN.COM
ServerAlias YOURDOMAIN.COM
DocumentRoot /var/www/YOURDOMAIN.COM/public_html
ErrorLog /var/www/YOURDOMAIN.COM/error.log
CustomLog /var/www/YOURDOMAIN.COM/requests.log combined
DocumentRoot /var/www/YOURDOMAIN.COM/public_html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/YOURDOMAIN.COM/public_html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
在命令行上输入 journalctl -xe
,结果将是
SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port 83 or 80
这意味着 SELinux 运行正在您的机器上运行,您需要禁用它。然后通过键入以下内容编辑配置文件
nano /etc/selinux/config
然后找到SELINUX=enforce
这一行,改成SELINUX=disabled
然后输入下面的命令和运行启动httpd
的命令setenforce 0
最后启动服务器
systemctl start httpd
由于 vhost.conf 中的一个简单拼写错误,我遇到了同样的错误。 请记住确保配置文件中没有任何错误。
apachectl configtest
允许 Apache 通过防火墙
允许默认的 HTTP 和 HTTPS 端口,端口 80 和 443,通过 firewalld:
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
并重新加载防火墙:
sudo firewall-cmd --reload
一些其他服务可能正在使用端口 80:尝试停止其他服务:HTTPD、SSL、NGINX、PHP,使用命令 sudo systemctl stop 和然后使用命令 sudo systemctl start httpd
错误可能在任何地方、配置、库或二进制文件。控制过程中的错误是系统无法 start/restart 服务时抛出的一般错误。在我的例子中,链接到 .service 文件中的 exe 的库之一有问题。修复该库解决了问题。
尝试使用此cmd 了解缺少的配置或文件配置中的错误 $ apachectl 配置测试