如何检查Ubuntu上是否正在运行特定服务


253

我不知道该服务的名称,但是想通过检查其状态来停止该服务。

例如,如果我想检查PostgreSQL服务是否正在运行,但是我不知道该服务的名称,那么我如何检查它的状态?

我知道用于检查服务名称是否已知的状态的命令。


1
那么,如果您不知道它的名称,您怎么知道它是正确的服务?我可以在/etc/init.d/中添加大量的初始化脚本,并使用包含关键字postgres的名称(尽管这毫无意义!),您怎么知道它是您要停止的服务?请为您的内容添加一些说明
Stefan 2013年

1
@Stefan,因为我是linux命令的新手,我想知道我是否不知道正确的服务名称,但部分使用服务名称或类似名称可以找到相同的名称
abcd 2013年

1
您可以使用服务列表或ps -ef并解析输出。无论如何,我认为停止服务是个好主意,您认为可以停止但不确定的服务。因此,您应列出要在要停止的计算机上运行的真实服务名称。如果您考虑仅停止“标准”服务,如postgres,mysql,http,则可以轻松找到服务名称。
Stefan 2013年

Answers:


438

我没有Ubuntu盒子,但是在Red Hat Linux上,您可以通过运行以下命令来查看所有正在运行的服务:

service --status-all

在列表上,+指示服务正在运行,-指示服务未运行,?指示服务状态无法确定。


3
谢谢。该文档没有说明每个服务旁边的符号是什么意思。我猜是“ +”表示它正在运行,而“-”表示不是...然后有“?” 旁边很多。+表示跑步?
奥斯卡

89
“ +”开始“-”停止“?” 未知 消息来源
gkiko 2014年

我将如何在redhat(centos)上执行此操作
PolarisUser 2014年

14
知道为什么一个服务被标记[-] {name}sudo service {name} status显示为正在运行吗?
Mark Murphy

6
您可能还希望同时运行sudo initctl list,如后文@linuxnewbee所述。
svassr 2015年

79

对于Ubuntu(已检查12.04)

您可以获取所有服务的列表,并使用'grep'颜色选择其中一项:

sudo service --status-all | grep postgres

或者,如果您知道正确的服务名称,则可以使用另一种方法:

sudo service postgresql status

4
我看不到grep有任何作用(也使用Ubuntu 12.04)。
notapatch 2014年

2
正确使用grep的方法是:sudo service --status-all 2>&1 | grep postgres
Adam Chwedyk

sudo service x statusActive: inactive (dead)在此处报告正在运行的服务,Ubuntu 15.04(生动)
Dinei

39

也许您想要的是ps命令;

ps -ef

将向您显示所有正在运行的进程。然后,如果您对要查找的内容有所了解,请使用grep进行过滤;

ps -ef | grep postgres

2
有时,进程名称与服务名称不同。
Francisco Quintero

可能更好pgrep -a postgres。这样也避免了那些烦人grep --color=auto needle
Pablo A


16

有一种简单的方法可以验证服务是否正在运行

systemctl status service_name

试用PostgreSQL:

systemctl status postgresql


2

最好的方法是使用 nmap在终端中工具。nmap是一个有用的工具,可以使用它分析启动系统IP Address,然后显示所有活动的网络services

打开terminal并使用此示例:

~$ nmap 192.168.1.3/24

Starting Nmap 5.21 ( http://nmap.org ) at 2016-05-16 22:49 IRDT
Nmap scan report for 192.168.1.3
Host is up (0.00020s latency).
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
23/tcp   open  telnet
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
3389/tcp open  ms-term-serv
3689/tcp open  rendezvous

1
显然,这仅在其网络服务有效的情况下有效。
Molomby

2

ps -ef | grep 名称与进程相关

上面的命令将提供pid之类的所有详细信息,有关该过程的开始时间。

例如,如果您希望所有Java实作的进程都给Java,或者如果您有进程名称,请输入


直到服务名称不超过8个字符为止,此方法才有效。否则,列表将被截断。
Tomas Kubes

0

查找正在运行的服务的肮脏方式。(有时是不准确的,因为某些自定义脚本没有| status |选项)

[root@server ~]# for qw in `ls /etc/init.d/*`; do  $qw status | grep -i running; done
auditd (pid  1089) is running...
crond (pid  1296) is running...
fail2ban-server (pid  1309) is running...
httpd (pid  7895) is running...
messagebus (pid  1145) is running...
mysqld (pid  1994) is running...
master (pid  1272) is running...
radiusd (pid  1712) is running...
redis-server (pid  1133) is running...
rsyslogd (pid  1109) is running...
openssh-daemon (pid  7040) is running...

0

对于centos,下面的命令对我有用(:

locate postgres | grep service

输出:

/usr/lib/firewalld/services/postgresql.xml

/ usr / lib / systemd / system / postgresql-9.3.service

sudo systemctl status postgresql-9.3.service

0

要检查linux操作系统上的服务状态:

//in case of super user(admin) requires    
sudo service {service_name} status 
// in case of normal user
service {service_name} status 

停止或启动服务

// in case of admin requires
sudo service {service_name} start/stop
// in case of normal user
service {service_name} start/stop 

要获取所有服务以及PID的列表:

sudo service --status-all

您可以使用systemctl代替直接调用service:

systemctl status/start/stop {service_name}

0

对于Centos 6.10: /sbin/service serviceNAME status

对于Centos 7.6和ubuntu 18.04: systemctl status NAME.service

适用于所有人: service --status-all


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.