Apache 拒绝开始声明错误的 PID

Apache 拒绝开始声明错误的 PID

我在 RPi3 的 Buildroot 环境中遇到一个奇怪的问题。我有这个 init.d 服务要启动apache2(版本 2.4.57):

# cat /etc/init.d/S50apache 
#!/bin/sh

case "$1" in
  start|restart|graceful|graceful-stop|stop)
    apachectl -k $1
    ;;
  reload)
    apachectl -k restart
    ;;
  *)
    echo "Usage: $0 {start|restart|reload|graceful|graceful-stop|stop}"
    exit 1
esac

exit $?

通常,当我启动 RPi3 时,我会注意到 Web 服务器没有运行。如果我尝试运行相同的命令,即:

# apachectl -k start

我得到:

httpd (pid 288) already running

但:

# ps aux | grep httpd
  477 root     grep httpd

和:

# ps aux | grep 288
  288 root     /usr/sbin/wpa_supplicant -u
  457 root     grep 288

很明显(除非我遗漏了一些东西)apache2没有运行,并且 PID 288 是一个完全不同的服务。

为了启动网络服务器我必须:

  1. apachectl -k stop-> 这实际上停止了wpa_supplicant服务!
  2. 重新启动wpa_supplicant服务
  3. 现在apachectl -k start可以使用并且apache2服务正在运行

这当然是不可接受的。此外,机器将无人值守,因此我需要解决这个问题。

但我首先必须了解为什么会发生这种情况。它怎么可能认为自己有不同的PID?

答案1

在较旧的 Apache 服务器中,存在一个错误

过时的 apache PID 文件可以阻止进程启动 #3553

检查下/var/run是否有这样的PID文件,并将其删除。

并升级您的 Apache。

相关内容