我在 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 是一个完全不同的服务。
为了启动网络服务器我必须:
apachectl -k stop
-> 这实际上停止了wpa_supplicant
服务!- 重新启动
wpa_supplicant
服务 - 现在
apachectl -k start
可以使用并且apache2
服务正在运行
这当然是不可接受的。此外,机器将无人值守,因此我需要解决这个问题。
但我首先必须了解为什么会发生这种情况。它怎么可能认为自己有不同的PID?
答案1
在较旧的 Apache 服务器中,存在一个错误
过时的 apache PID 文件可以阻止进程启动 #3553
检查下/var/run
是否有这样的PID文件,并将其删除。
并升级您的 Apache。