简体   繁体   English

systemctl restart httpd 启动失败 Apache HTTP 服务器 httpd pid 已经运行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM