Как проверить, работает ли определенный сервис в Ubuntu


253

Я не знаю название службы, но хотел бы остановить службу, проверив ее статус.

Например, если я хочу проверить, работает ли служба PostgreSQL или нет, но я не знаю имя службы, то как я могу проверить ее состояние?

Я знаю команду для проверки статуса, если известно имя службы.


1
Так как вы узнаете, что это правильный сервис, если не знаете его название? Я могу добавить множество сценариев инициализации в /etc/init.d/ с именами, содержащими ключевое слово postgres (хотя это было бы бессмысленно!), И как узнать, что это служба, которую вы хотели бы остановить? Пожалуйста, добавьте некоторые объяснения для вашего контекста
Стефан

1
@Stefan, поскольку я новичок в командах Linux, я хотел бы знать, если я не знаю правильное имя службы, но частично используя часть имени службы или подобное имя, я могу найти то же самое
abcd

1
Вы можете использовать списки служб или ps -ef и проанализировать результаты. Во всяком случае, я не думаю, что это хорошая идея - останавливать сервисы, которые, как вы думаете , следует остановить, но не уверены . Поэтому вы должны составить список с реальными именами служб, запущенных на компьютере, который вы хотели бы остановить. Если вы решите остановить только «стандартные» сервисы, такие как postgres, mysql, http, вы можете легко узнать названия сервисов.
Стефан

Проверьте группу Askubuntu: askubuntu.com/questions/407075/…
svassr

Ответы:


438

У меня нет Ubuntu box, но в Red Hat Linux вы можете увидеть все запущенные сервисы, выполнив следующую команду:

service --status-all

В списке +указывает, что служба работает, -указывает, что служба не запущена, ?указывает, что состояние службы не может быть определено.


3
Спасибо. В документации не сказано, что означают символы рядом с каждым сервисом. Я предполагаю, что "+" означает, что он работает, а "-" означает, что это не так ... тогда есть "?" рядом со многими. + значит бегать?
Оскар

89
"+" запущен "-" остановлен "?" неизвестный источник
gkiko

Как бы я сделал это на redhat (centos)
PolarisUser

14
Любая идея, почему один сервис помечен, [-] {name}но sudo service {name} statusпоказывает, как работает?
Марк Мерфи

6
Вы также можете запустить sudo initctl list, как уже упоминалось здесь @linuxnewbee.
svassr

79

Для Ubuntu (проверено с 12.04)

Вы можете получить список всех услуг и выбрать по цвету один из них с помощью «grep»:

sudo service --status-all | grep postgres

Или вы можете использовать другой способ, если вы знаете правильное название услуги:

sudo service postgresql status

4
Я не вижу, чтобы grep имел какой-либо эффект (также использующий Ubuntu 12.04).
notapatch

2
Правильный способ grep это:sudo service --status-all 2>&1 | grep postgres
Адам Chwedyk

sudo service x statusсообщает Active: inactive (dead)здесь о работающем сервисе, Ubuntu 15.04 (Vivid)
Dinei

39

Может быть, вам нужна команда ps;

ps -ef

покажет вам все запущенные процессы. Тогда, если у вас есть представление о том, что вы ищете, используйте grep для фильтрации;

ps -ef | grep postgres

2
Иногда имя процесса не совпадает с именем службы.
Франсиско Кинтеро

Наверное, лучше pgrep -a postgres. Это также позволяет избежать раздражающих grep --color=auto needle.
Пабло А

23

Если вы выполните следующую команду, вы получите список служб:

sudo service --status-all

Чтобы получить список заданий upstart, выполните эту команду:

sudo initctl list

@ Ajay Это потому, что Ubuntu перешла с upstart на systemd 16.10 . Чтобы получить весь список, я бы использовалsystemctl --full --type service --all
Пабло А

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
Это работает только если это сетевой сервис, очевидно.
Моломби

2

бегать

ps -ef | grep name-to-process

Приведенная выше команда выдаст все детали, такие как pid, время начала процесса.

например, если вы хотите, чтобы все процессы, реализованные в java, давали java, или если у вас есть имя процесса, укажите имя


Это работает до тех пор, пока имя службы не будет содержать 8 символов или менее. В противном случае, список усекается.
Томас Кубес

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 вместо прямого вызова сервиса:

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.