[英]systemctl restart httpd Failed to start The Apache HTTP Server httpd pid already running
I recently rebuilt my server on AWS, upgrading from Amazon Linux to Amazon Linux 2, which like Linux 1 appears to be a fork of CentOS, now CentOS 7. My vhost config remains the same as the previous build while all the other conf files are the newer default files. I recently rebuilt my server on AWS, upgrading from Amazon Linux to Amazon Linux 2, which like Linux 1 appears to be a fork of CentOS, now CentOS 7. My vhost config remains the same as the previous build while all the other conf files are较新的默认文件。 (Just FYI, not sure it has any bearing).
(仅供参考,不确定它是否有任何影响)。
Since the rebuild I can no longer do systemctl restart httpd
.由于重建我不能再做
systemctl restart httpd
。 I get the error The Apache HTTP Server httpd pid (NNNN) already running
.我收到错误
The Apache HTTP Server httpd pid (NNNN) already running
。
I have done lots of googling and see that quite a few people have this error but it always turns out to be something different that they have done.我做了很多谷歌搜索,发现很多人都有这个错误,但结果总是与他们所做的不同。 I cannot think of anything "different" I did.
我想不出我所做的任何“不同”。
I have learned that the PID that I see as "already running", owned by root, is the "master process" and all the other PIDs, owned by apache, are the "worker processes".我了解到,我看到的“已经在运行”的 PID 是 root 拥有的,是“主进程”,而 apache 拥有的所有其他 PID 是“工作进程”。 https://serverfault.com/questions/355223/centos-httpd-running-as-both-root-and-apache-user
https://serverfault.com/questions/355223/centos-httpd-running-as-both-root-and-apache-user
root 4461 1 0 07:18 ? 00:00:00 /usr/sbin/httpd -k restart
apache 4467 4461 0 07:18 ? 00:00:09 /usr/sbin/httpd -k restart
apache 4468 4461 0 07:18 ? 00:00:08 /usr/sbin/httpd -k restart
apache 4471 4461 0 07:18 ? 00:00:08 /usr/sbin/httpd -k restart
apache 4477 4461 0 07:18 ? 00:00:08 /usr/sbin/httpd -k restart
apache 4498 4461 0 07:18 ? 00:00:07 /usr/sbin/httpd -k restart
apache 5236 4461 0 07:19 ? 00:00:08 /usr/sbin/httpd -k restart
apache 5248 4461 0 07:19 ? 00:00:09 /usr/sbin/httpd -k restart
apache 5987 4461 0 07:20 ? 00:00:09 /usr/sbin/httpd -k restart
apache 5993 4461 0 07:20 ? 00:00:08 /usr/sbin/httpd -k restart
apache 5994 4461 0 07:20 ? 00:00:09 /usr/sbin/httpd -k restart
# systemctl restart httpd;systemctl status httpd;
Job for httpd.service failed. See "systemctl status httpd.service" and "journalctl -xe" for details.
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: failed (Result: protocol) since Thu 2021-12-23 19:56:05 UTC; 4ms ago
Docs: man:httpd.service(8)
Process: 31799 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=0/SUCCESS)
Main PID: 31799 (code=exited, status=0/SUCCESS)
Status: "Reading configuration..."
Dec 23 19:56:04 ip-10-5-11-55.ec2.internal systemd[1]: Starting The Apache HTTP Server...
Dec 23 19:56:05 ip-10-5-11-55.ec2.internal httpd[31799]: httpd (pid 4461) already running
Dec 23 19:56:05 ip-10-5-11-55.ec2.internal systemd[1]: Failed to start The Apache HTTP Server.
Dec 23 19:56:05 ip-10-5-11-55.ec2.internal systemd[1]: Unit httpd.service entered failed state.
Dec 23 19:56:05 ip-10-5-11-55.ec2.internal systemd[1]: httpd.service failed.
Nothing unusual in the Apache error log: Apache 错误日志中没有异常:
[Thu Dec 23 07:18:58.777745 2021] [suexec:notice] [pid 4460] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Thu Dec 23 07:18:58.802753 2021] [lbmethod_heartbeat:notice] [pid 4461] AH02282: No slotmem from mod_heartmonitor
[Thu Dec 23 07:18:58.802850 2021] [http2:warn] [pid 4461] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more
[Thu Dec 23 07:18:58.847386 2021] [mpm_prefork:notice] [pid 4461] AH00163: Apache/2.4.51 () PHP/7.4.21 configured -- resuming normal operations
[Thu Dec 23 07:18:58.847414 2021] [core:notice] [pid 4461] AH00094: Command line: '/usr/sbin/httpd'
If I kill this "master" PID, then I can do restarts no problem.如果我杀死这个“主”PID,那么我可以重新启动没问题。
# kill 4461
# systemctl restart httpd;systemctl status httpd;
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2021-12-23 20:01:31 UTC; 6ms ago
Docs: man:httpd.service(8)
Main PID: 3091 (httpd)
Status: "Configuration loaded."
CGroup: /system.slice/httpd.service
└─3091 /usr/sbin/httpd -DFOREGROUND
Dec 23 20:01:31 ip-10-5-11-55.ec2.internal systemd[1]: Starting The Apache HTTP Server...
Dec 23 20:01:31 ip-10-5-11-55.ec2.internal systemd[1]: Started The Apache HTTP Server.
# ps -Af | grep httpd
root 3145 1 1 20:01 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 3147 3145 0 20:01 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 3153 3145 0 20:01 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 3171 3145 0 20:01 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 3177 3145 0 20:01 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 3183 3145 0 20:01 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
Most people's advice is "just kill the process", https://serverfault.com/questions/825216/apache-failes-to-start-already-running-but-not-maching-pid-file but I need this to work unattended.大多数人的建议是“杀死进程”, https://serverfault.com/questions/825216/apache-failes-to-start-already-running-but-not-maching-pid-file但我需要这个才能工作无人看管。 What else could I be looking at?
我还能看什么?
Although I searched alot I did not find answers that were given for other flavors of Linux.尽管我进行了很多搜索,但没有找到针对其他 Linux 风格的答案。 I came to the answer when I noticed that httpd was originally started with "apachectl" and I was trying to restart using "systemctl" and thought this might be the issue.
当我注意到 httpd 最初以“apachectl”开头并且我试图使用“systemctl”重新启动并认为这可能是问题时,我得到了答案。 When I searched for this I found many answers.
当我搜索这个时,我找到了很多答案。 This appears to be the most concise: https://unix.stackexchange.com/questions/240528/apache-and-systemd
这似乎是最简洁的: https://unix.stackexchange.com/questions/240528/apache-and-systemd
In others you see the same issue I experienced which is once you start with apachectl you must stick with it as systemd cannot know what you have done with apachectl as it uses a different config.在其他人中,您会看到我遇到的相同问题,即一旦您开始使用 apachectl,您必须坚持使用它,因为 systemd 无法知道您对 apachectl 做了什么,因为它使用了不同的配置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.