我正在尝试解决一个恼人的问题。我们的服务器设置以 nginx 作为主要前端,然后以 Apache2 作为运行 Perl 脚本的后端。我正在努力重写一些 Perl 脚本(因为它们曾经在更旧版本的 Perl 上运行),但我对 Apache 的工作非常头疼。当我运行:
service apache2 stop
它似乎运行:
root@admin:/home/user/web/example.com/logs# service apache2 stop
root@admin:/home/user/web/example.com/logs#
但实际上,它似乎仍在运行!其触发的命令是:
/etc/init.d/apache2 stop
如果我手动运行它,我会得到:
root@admin:/home/user/web/example.com/logs# /etc/init.d/apache2 stop
[ ok ] Stopping apache2 (via systemctl): apache2.service.
..但是当我进入浏览器并重新加载页面时,它仍然加载! (这意味着 Apache 正在运行)
有人能建议我去哪里找吗?这真让我抓狂!如果您需要更多信息,请告诉我。
我看到一些进程正在运行:
[] ps aux
root 5948 1.4 0.7 307664 91548 ? Ss 13:32 0:00 /usr/sbin/apache2 -k start
www-data 5952 0.8 0.9 371080 111964 ? S 13:32 0:00 /usr/sbin/apache2 -k start
www-data 5953 0.6 0.8 369416 110012 ? S 13:32 0:00 /usr/sbin/apache2 -k start
www-data 5954 0.5 0.8 369416 110012 ? S 13:32 0:00 /usr/sbin/apache2 -k start
www-data 5955 0.6 0.8 369416 110012 ? S 13:32 0:00 /usr/sbin/apache2 -k start
www-data 5956 0.1 0.7 343800 90276 ? S 13:32 0:00 /usr/sbin/apache2 -k start
www-data 5959 0.0 0.6 307688 79692 ? S 13:32 0:00 /usr/sbin/apache2 -k start
更新:根据建议,我尝试使用它来杀死它:
root@admin:~# pgrep apache2 | xargs kill -9
root@admin:~# pgrep apache2 | xargs kill -9
root@admin:~# pgrep apache2 | xargs kill -9
root@admin:~# pgrep apache2 | xargs kill -9
root@admin:~# pgrep apache2 | xargs kill -9
root@admin:~# pgrep apache2 | xargs kill -9
..但之后我又能看见它了!(所有进程的 pid 都相同)
root@admin:~# ps aux | grep apache
root 6080 0.4 0.7 307724 92052 ? Ss 13:34 0:00 /usr/sbin/apache2 -k start
www-data 6084 0.2 0.8 369400 110024 ? S 13:34 0:00 /usr/sbin/apache2 -k start
www-data 6085 0.2 0.8 369400 110024 ? S 13:34 0:00 /usr/sbin/apache2 -k start
www-data 6086 0.1 0.8 369392 110240 ? S 13:34 0:00 /usr/sbin/apache2 -k start
www-data 6087 0.1 0.8 369400 110024 ? S 13:34 0:00 /usr/sbin/apache2 -k start
www-data 6088 0.1 0.8 369400 110244 ? S 13:34 0:00 /usr/sbin/apache2 -k start
www-data 6400 0.3 0.8 369400 110024 ? S 13:35 0:00 /usr/sbin/apache2 -k start
root 6520 0.0 0.0 14224 972 pts/0 S+ 13:37 0:00 grep apache
更新2:
root@admin:~# killall -9 apache2
apache2: no process found
root@admin:~# ps aux | grep apache2
root 6977 1.2 0.8 315020 99236 ? Ss 13:41 0:00 /usr/sbin/apache2 -k start
www-data 6981 0.4 0.9 376408 117364 ? S 13:41 0:00 /usr/sbin/apache2 -k start
www-data 6982 0.4 0.9 376408 117364 ? S 13:41 0:00 /usr/sbin/apache2 -k start
www-data 6983 0.4 0.9 376408 117364 ? S 13:41 0:00 /usr/sbin/apache2 -k start
www-data 6984 0.5 0.9 376408 117364 ? S 13:41 0:00 /usr/sbin/apache2 -k start
www-data 6985 0.0 0.7 315044 87100 ? S 13:41 0:00 /usr/sbin/apache2 -k start
www-data 6988 0.0 0.7 315044 87100 ? S 13:41 0:00 /usr/sbin/apache2 -k start
root 7048 0.0 0.0 14224 948 pts/0 S+ 13:42 0:00 grep apache2
答案1
也许进程因为某种原因挂起了。你试过吗kill -9
?PIDapache2 进程 id?
或者你可以运行这个命令几次:
pgrep apache2 | xargs kill -9
然后尝试使用 /etc/init.d/apache2 start 启动它,看看它是否启动。之后,您可以查看您的 apache 日志,看看是否能够找到任何有用的信息,以便进一步调查它...
答案2
读过几个答案后,没有一个能彻底解决问题。现在,有了以下内容,我终于停下来了Apache Web Server
。
运行此命令来获取正在运行的进程的 pid(假设您的服务器在端口 80 上运行)
sudo netstat -lnp | grep ::80
然后根据返回的 pid 终止该进程
sudo kill -15 <PID>
现在你的服务器应该停止了。
答案3
我偶然遇到了同样的问题,你采取的步骤对我也不起作用。对我有用的方法是在停止服务器后终止负责缓存的进程:
sudo service apache2 stop
ps aux | grep apache
www-data 1671 0.0 0.0 19904 172 ? Ss 10:55 0:00
/usr/bin/htcacheclean -d 120 -p /var/cache/apache2/mod_cache_disk -l 300M -n
kill 1671
然后清除浏览器的缓存后,运行sudo service apache2 stop/start
就按预期进行了。
答案4
您只需清除浏览器缓存,然后您就会看到它已停止。完成此操作后,重新启动 apache2 并且网站将会发生变化。