วิธีการตรวจสอบว่ามีบริการเฉพาะทำงานบน Ubuntu หรือไม่


253

ฉันไม่ทราบชื่อบริการ แต่ต้องการหยุดบริการโดยตรวจสอบสถานะ

ตัวอย่างเช่นหากฉันต้องการตรวจสอบว่าบริการPostgreSQLทำงานอยู่หรือไม่ แต่ฉันไม่รู้ชื่อของบริการฉันจะตรวจสอบสถานะได้อย่างไร

ฉันรู้ว่าคำสั่งเพื่อตรวจสอบสถานะหากทราบชื่อบริการ


1
ดังนั้นคุณจะรู้ได้อย่างไรว่าเป็นบริการที่ถูกต้องหากคุณไม่ทราบชื่อ ฉันสามารถเพิ่มสคริปต์ init มากมายไปยัง /etc/init.d/ ด้วยชื่อที่มีคำหลัก postgres (แม้ว่านี่จะไม่มีเหตุผล!) และคุณจะรู้ได้อย่างไรว่าเป็นบริการที่คุณต้องการหยุด โปรดเพิ่มคำอธิบายเกี่ยวกับบริบทของคุณ
Stefan

1
@tefan เนื่องจากฉันยังใหม่กับคำสั่ง linux ฉันต้องการทราบว่าฉันไม่ทราบชื่อบริการที่ถูกต้อง แต่บางส่วนใช้ชื่อบริการบางส่วนหรือชื่อที่คล้ายกันฉันสามารถหาชื่อเดียวกันได้
abcd

1
คุณสามารถใช้รายการบริการหรือ ps -ef และแยกวิเคราะห์ผลลัพธ์ ทั้งนี้ผมไม่คิดว่านี่เป็นความคิดที่ดีที่จะหยุดให้บริการที่คุณคิดว่าจะเป็นคนที่จะหยุด แต่ไม่แน่ใจว่า ดังนั้นคุณควรสร้างรายการที่มีชื่อบริการจริงที่ทำงานอยู่บนเครื่องที่คุณต้องการหยุด หากคุณพิจารณาที่จะหยุดให้บริการ "มาตรฐาน" เท่านั้นเช่น postgres, mysql, http คุณสามารถค้นหาชื่อบริการได้ง่าย ๆ
Stefan

ตรวจสอบกลุ่ม askubuntu: askubuntu.com/questions/407075/…
svassr

คำตอบ:


438

ฉันไม่มีกล่อง Ubuntu แต่บนRed Hat Linuxคุณสามารถเห็นบริการที่กำลังทำงานอยู่ทั้งหมดโดยการเรียกใช้คำสั่งต่อไปนี้:

service --status-all

ในรายการ+หมายถึงบริการกำลังทำงานอยู่-แสดงว่าเซอร์วิสไม่ได้ทำงานอยู่?แสดงว่าไม่สามารถระบุสถานะบริการได้


3
ขอบคุณ เอกสารไม่ได้บอกความหมายของสัญลักษณ์ที่อยู่ถัดจากแต่ละบริการ ฉันเดาว่า "+" หมายถึงมันกำลังทำงานอยู่และ "-" หมายความว่าไม่ใช่ ... แล้วมี "?" ถัดจากหลาย ๆ + หมายถึงทำงานอยู่หรือ
ออสการ์

89
"+" เริ่มต้น "-" หยุด "?" แหล่งที่
gkiko

ฉันจะทำเช่นนี้กับ redhat (centos) อย่างไร
PolarisUser

14
ความคิดใด ๆ ที่ทำให้บริการหนึ่งถูกทำเครื่องหมายด้วย[-] {name}แต่sudo service {name} statusแสดงว่ากำลังทำงานอยู่
Mark Murphy

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
Adam Chwedyk

sudo service x statusรายงานActive: 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นอกจากนี้ยังหลีกเลี่ยงที่น่ารำคาญ
ปาโบล

23

หากคุณเรียกใช้คำสั่งต่อไปนี้คุณจะได้รับรายการบริการ:

sudo service --status-all

ในการรับรายการงานพุ่งพรวดให้รันคำสั่งนี้:

sudo initctl list

@Ajay นั่นเพราะUbuntu เปลี่ยนจากคนธรรมดาที่จะ systemd ใน 16.10 เพื่อให้ได้รายการทั้งหมดฉันจะใช้systemctl --full --type service --all
Pablo A

16

มีวิธีง่าย ๆ ในการตรวจสอบว่าบริการกำลังทำงานอยู่หรือไม่

systemctl status service_name

ลอง PostgreSQL:

systemctl status postgresql

6

คุณสามารถใช้คำสั่งด้านล่างเพื่อตรวจสอบรายการบริการทั้งหมด

ps aux 

วิธีตรวจสอบบริการของคุณเอง:

ps aux | grep postgres

นี่เป็นคำตอบ
Pablo A

2

วิธีที่ดีที่สุดคือการใช้nmapเครื่องมือในเทอร์มินัล nmap เป็นเครื่องมือที่มีประโยชน์ที่จะวิเคราะห์ระบบ up โดยใช้มัน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 realted ให้ java หรือถ้าคุณมีชื่อของกระบวนการวางชื่อ


ใช้งานได้จนกว่าชื่อบริการคือ 8 ตัวอักษรหรือน้อยกว่า มิฉะนั้นรายชื่อจะถูกตัดทอน
Tomas Kubes

0

วิธีที่สกปรกในการค้นหาบริการที่ทำงานอยู่ (บางครั้งมันไม่ถูกต้องเนื่องจากสคริปต์ที่กำหนดเองบางตัวไม่มี | สถานะ | ตัวเลือก)

[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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.