我有一个运行 CentOS 7 的实例。当我重新启动时,我遇到了困难httpd
。
我的配置工作正常,我的网站按照我想要的方式进行广播;而且,当我执行命令时sudo apachectl configtest
,我得到了返回Syntax OK
。
但是当我重新启动时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 Tue 2018-08-28 12:30:26 CEST; 6s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 9569 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
Process: 9568 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 9568 (code=exited, status=1/FAILURE)
Aug 28 12:30:26 vps httpd[9568]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
Aug 28 12:30:26 vps httpd[9568]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
Aug 28 12:30:26 vps httpd[9568]: no listening sockets available, shutting down
Aug 28 12:30:26 vps httpd[9568]: AH00015: Unable to open logs
Aug 28 12:30:26 vps systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Aug 28 12:30:26 vps kill[9569]: kill: cannot find process ""
Aug 28 12:30:26 vps systemd[1]: httpd.service: control process exited, code=exited status=1
Aug 28 12:30:26 vps systemd[1]: Failed to start The Apache HTTP Server.
Aug 28 12:30:26 vps systemd[1]: Unit httpd.service entered failed state.
Aug 28 12:30:26 vps systemd[1]: httpd.service failed.
当我重新启动它时,我发现有其他程序正在代替它工作httpd
。因此我执行了netstat -tulpn | grep :80
。
tcp 0 0 0.0.0.0:8060 0.0.0.0:* LISTEN 2560/nginx: master
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2560/nginx: master
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 1434/unicorn master
tcp 0 0 127.0.0.1:8082 0.0.0.0:* LISTEN 1307/sidekiq 5.1.3
Nginx
上述结果让我有点困惑,因为我的系统上没有安装并且which nginx
也没有返回任何内容。
但是,当我重新启动实例时,httpd
它按预期工作。
我应该怎么做才能解决我的问题?
答案1
好的,谜团解开了;感谢 Gerald Schneider。(尽管幸运的是它不是特洛伊木马)
执行ps -Af | grep $pid
给了我更多的见解,并强调了 GitLab 引起了我的注意。(我知道这里面有些可疑,但无法找到问题的根本原因并正确识别它)
httpd
与 相冲突gitlab
。一旦我执行sudo gitlab-ctl stop
并尝试重新启动httpd
,一切就都正常了。
还,这个问题对 Apache - GitLab - Nginx 困境提供了更多见解。(首先提到的是 Apache 和 GitLab 在端口 80 上存在矛盾:])
答案2
您可以使用systemctl
命令来识别正在运行的服务。
在你的情况下systemctl list-unit-files | grep nginx
例子
systemctl list-unit-files | grep nginx
nginx-nr-agent.service generated
nginx.service enabled
之后,你可以使用以下命令找到有关正在运行的服务的更多信息systemctl status servicename
例子
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-08-28 15:03:08 EEST; 47min ago
Docs: man:nginx(8)
Process: 1455 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
Process: 1460 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 1458 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 1462 (nginx)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/nginx.service
├─1462 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─1463 nginx: worker process
ExecStop 和 ExecStart 可能会帮助您识别二进制文件的位置。
答案3
master 是 Linux 服务器中 postfix 使用的。尝试使用以下命令停止 postfix
/sbin/service postfix stop
另外,如果你的配置不需要 postfix,你可以使用以下命令阻止它在服务器重新启动时重新启动
chkconfig postfix off
另外,从错误中可以清楚地看出,您正在尝试在 0.0.0.0:80 上启动 httpd。尝试在 httpd.conf 文件中使用 ip 地址以获取更具体的错误。
现在尝试停止并重新启动 httpd 服务。