使用“service apache2 stop”时 apache 不会停止

使用“service apache2 stop”时 apache 不会停止

我正在尝试解决一个恼人的问题。我们的服务器设置以 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 -9PIDapache2 进程 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 并且网站将会发生变化。

相关内容