如何通过命令行找出httpd是否正在运行?


29

我正在为服务器使用小型控制面板。我需要一个命令来说明httpd正在运行还是已停止。

可能还将对其他服务使用相同的代码。

Answers:


28

大多数人都通过init系统运行其httpd(Apache,Nginx等)。如果您是从软件包安装的,那几乎可以肯定。几乎所有这些init系统都具有一种在运行的方法。在我的情况下,我使用的是nginx,它附带SysV风格的初始化脚本并接受status参数,如下所示:

$ /etc/init.d/nginx status
 * nginx is running

显然,如果您运行的是不同的httpd,脚本或init系统,则语法将稍有不同,但是除非您自己手动启动httpd(这是世界上最糟糕的主意),否则您将可能使用了一个不错的托管启动脚本,该脚本将允许您查询状态。

slm的答案有更多关于这种init查询的信息,但是信任的问题在于它只能真正告诉您进程是否仍在运行。您的httpd的主进程可能正在运行,但是在某种程度上陷入了僵局。跳过简单的初始化测试并继续进行行为测试非常有意义。

我们对httpds了解的一件事是他们在听。通常在port上*:80,但如果不在,则可以在代码之后改写代码。在这里,我只是查看awk的输出,netstat以查看它是否在正确的端口上进行监听。

$ sudo netstat -ntlp | awk '$4=="0.0.0.0:80"'
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2079/nginx

我们也可以检查哪个进程也在运行,以确保正确的 httpd正在运行。我们可以进行各种检查。取决于你想成为多么偏执:)

但这甚至只是httpd的反映。要真的测试吗?好吧,让我们测试一下。

$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200

我只是在看响应代码(200表示“ A-Okay!”),但同样,我们可以深入研究并实际测试输出以确保正确生成了输出。

但这还不够彻底。您正在检查localhost,它报告了200,没有错吗?如果海狸通过提供httpd的网络电缆(而不是系统的其余部分)咀嚼怎么办?那又怎样呢?当您实际停机时,您要报告正常运行时间。几乎没有什么比不正确的状态数据更专业。

因此,让我们与外部服务器进行对话(最好是在完全不同的连接上,在另一个遥远的银河系中),并要求它查询我们的服务器:

$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200

至此,所有已报告的问题要么是应用程序内问题(可能有其自身的错误-处理和-报告,要么在客户端端)。

这些测试的组合可以帮助确定问题所在。


3
httpd怎么了?
小河

@Creek是什么意思?
奥利(Oli)2014年

4
+1是一个很好的答案,但是OP询问了有关httpd的问题,而您使用了nginx
Creek

4
@Creek在我的书中,“ httpd”表示“ http守护程序; Web服务器”。没有一个具体的。您认为我应该做些什么?我不知道如何才能更彻底地检查一个人而无需先购买它。
奥利2014年

3
如果我能说出我愿意的话可以请你喝一杯,那很经典。我认为OP的意思是apache的httpd
Creek

25

您可以在大多数Linux发行版上普遍使用services命令。

$ service <service> status

$ service httpd status
httpd (pid  23569) is running...

可以将同一命令用于单独运行的所有服务,或者查找所有服务的状态。

$ service --status-all
python is stopped
automount (pid 22457) is running...
Avahi daemon is not running
Avahi DNS daemon is not running
crond (pid  23577) is running...
gpm is stopped
hald is stopped
httpd (pid  23569) is running...
...

SysVinit,Systemd和Upstart中用于列出服务的各种方法

如果使用的是较典型的服务管理框架之一,则可以使用以下方法列出每个服务管理框架中的服务。

SysVinit

$  ls -l /etc/init.d/ | head -10
total 220
-rwxr-xr-x 1 root root  1422 Jan 13  2009 ajaxterm
-rwxr-xr-x 1 root root  3052 Apr 20  2012 autofs
-rwxr-xr-x 1 root root  1877 Apr 13  2011 avahi-daemon
-rwxr-xr-x 1 root root  1824 Apr 13  2011 avahi-dnsconfd
-rwxr-xr-x 1 root root  1926 Feb 22  2012 crond
-rwxr-xr-x 1 root root 14291 Dec 19  2011 functions
-rwxr-xr-x 1 root root  1778 Jan  6  2007 gpm
-rwxr-xr-x 1 root root  1586 Mar  5  2011 haldaemon
-rwxr-xr-x 1 root root  5742 Dec 19  2011 halt

系统化

$ systemctl list-unit-files --type=service | head -10
UNIT FILE                                   STATE   
abrt-ccpp.service                           enabled 
abrt-oops.service                           enabled 
abrt-pstoreoops.service                     disabled
abrt-vmcore.service                         enabled 
abrt-xorg.service                           enabled 
abrtd.service                               enabled 
accounts-daemon.service                     enabled 
alsa-restore.service                        static  
alsa-state.service                          static  

暴发户

$ initctl list | head -10
avahi-daemon start/running, process 1090
mountall-net stop/waiting
nmbd start/running, process 2045
passwd stop/waiting
rc stop/waiting
rsyslog start/running, process 1088
tty4 start/running, process 1211
udev start/running, process 483
upstart-udev-bridge start/running, process 480
ureadahead-other stop/waiting

参考文献


据我所知,这是正确的答案。但是OP接受了另一个:)
Ramesh 2014年

@Ramesh-没关系,Oli的A也是正确的,只是有些深奥。
slm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.