วิธีการแสดงรายการบริการ Linux ด้วย systemctl

เผยแพร่แล้ว: 2022-10-23
แล็ปท็อป Linux แสดง bash prompt
fatmawati achmad zaenuri/Shutterstock.com
หากต้องการดูบริการที่ทำงานอยู่ทั้งหมดบนระบบ Linux ที่มี systemd ให้ใช้คำสั่ง "systemctl --type=service --state=running" ซึ่งจะแสดงให้คุณเห็นชื่อ การโหลด สถานะย่อย และคำอธิบายของบริการที่ใช้งานอยู่ คุณยังสามารถเปลี่ยนค่าสถานะเพื่อดูบริการที่ไม่ทำงาน ออกจากระบบ ล้มเหลว หรือไม่ได้ใช้งาน

คอมพิวเตอร์ Linux ของคุณต้องอาศัยงานพื้นหลังจำนวนมากที่เรียกว่าบริการหรือภูต ในการแจกแจงแบบอิง systemd คุณมีคำสั่งในตัวที่ให้คุณดูว่าบริการใดกำลังทำงาน ปิดใช้งาน หรือล้มเหลว

บริการและภูต

บริการและภูตเป็นงานเบื้องหลังที่ทำงานโดยไม่มีส่วนต่อประสานกับผู้ใช้ ไม่ต้องการการโต้ตอบของมนุษย์ และมักจะเริ่มทำงานเมื่อคอมพิวเตอร์เริ่มทำงาน

ครั้งหนึ่ง บริการต่างๆ ถูกเปิดตัวโดย init ซึ่งเป็นกระบวนการแรกที่เปิดตัว รายละเอียดของบริการอยู่ในชุดของสคริปต์ที่อยู่ในไดเร็กทอรี “/etc/init/d” ในการแจกแจงแบบ non-systemd ยังคงเป็นกรณีนี้

ในโลกของ systemd บริการต่างๆ ถูกเปิดตัวโดย systemd ซึ่งเป็นกระบวนการแรกที่เปิดตัวในขณะนี้ รายละเอียดของบริการจะถูกเก็บไว้ใน ไฟล์หน่วยที่ อยู่ในไดเร็กทอรี "/usr/lib/systemd"

ตามหน้า man systemd เป็นระบบและผู้จัดการบริการ คุณสามารถใช้คำสั่ง systemctl เพื่อตรวจสอบและควบคุมลักษณะต่างๆ ของระบบ systemd รวมถึงบริการและภูต

เนื่องจากเรากำลังดูคำสั่งเฉพาะของ systemd ที่นี่ สิ่งแรกที่คุณต้องรู้คือว่าคุณกำลังรันการแจกจ่ายแบบ systemd หรือไม่

ที่เกี่ยวข้อง: ทำไมระบบของ Linux ยังคงแตกแยกหลังจากหลายปีที่ผ่านมา

init หรือ systemd ตาม?

ลีนุกซ์ส่วนใหญ่ใช้ systemd ซึ่งรวมถึง Arch, Red Hat และ Debian และการแจกแจงจำนวนมากที่ได้มาจากพวกเขา ซึ่งรวมถึงตระกูลการกระจายของ Ubuntu, Fedora และสปินและ Manjaro และการแจกแจงแบบ Arch-based อื่น ๆ

อย่างไรก็ตาม มีส้อมหรือรสชาติของการกระจายเหล่านี้บางส่วนที่สร้างขึ้นโดยเฉพาะเพื่อหลีกเลี่ยงการใช้ systemd ไม่เพียงแค่นั้น แต่ยังมีระบบ init อื่น ๆ ที่บางคนอาจเลือกใช้แทนระบบที่มาตามค่าเริ่มต้นในการแจกจ่าย เช่น runit หรือ s6-linux-init

วิธีเรียกใช้โปรแกรม Linux เมื่อเริ่มต้นระบบด้วย systemd
ที่เกี่ยวข้อง วิธีเรียกใช้โปรแกรม Linux เมื่อเริ่มต้นระบบด้วย systemd

หากคุณต้องดูแลคอมพิวเตอร์ Linux ที่คุณไม่ได้ตั้งค่าเอง วิธีเดียวที่จะแน่ใจได้ว่าเครื่องนั้นใช้ systemd หรือไม่ คือการตรวจสอบ เราสามารถทำได้โดยดูที่แผนผังกระบวนการด้วยคำสั่ง pstree เราเพียงแค่ต้องเห็นส่วนบนสุดของแผนผัง—เรากำลังมองหากระบวนการแรกที่ดำเนินการ—ดังนั้น เราจะไพพ์เอาต์พุตผ่านคำสั่ง head และขอห้ารายการแรก

 pstree | หัว -5 

ใช้ pstree ไปป์ผ่าน head เพื่อตรวจสอบว่าการติดตั้ง Linux ใช้ systemd . หรือไม่

เราจะเห็นได้ว่า systemd เป็นกระบวนการแรกที่รันหลังจากบูท ดังนั้นเราจึงติดตั้ง Linux บน systemd อย่างแน่นอน

ที่เกี่ยวข้อง: วิธีจัดการกระบวนการจาก Linux Terminal: 10 คำสั่งที่คุณต้องรู้

การใช้ systemctl เพื่อแสดงรายการบริการ

คำสั่งสำหรับแสดงรายการ services และ daemons คือ systemctl เราสามารถปรับแต่งคำสั่ง systemctl ด้วยตัวเลือก type และ state เรากำลังขอให้ systemctl รายงานเกี่ยวกับบริการที่อยู่ในสถานะกำลังทำงาน

 systemctl --type=service --state=running 

ใช้ systemctl เพื่อแสดงรายการบริการที่ทำงานอยู่

มีการสร้างตารางข้อมูล ถ้ามันกว้างหรือยาวเกินไปสำหรับหน้าต่างเทอร์มินัลของคุณ ไฟล์นั้นจะแสดงในโปรแกรมดูไฟล์เริ่มต้นของคุณ ซึ่งมีแนวโน้มว่าจะ less

ผลลัพธ์จากการเรียก systemctl แสดงในโปรแกรมดูไฟล์น้อย

หากต้องการดูจุดสิ้นสุดทางขวามือของตาราง ให้กดแป้นลูกศรขวา หากต้องการกลับไปที่มุมมองปกติ ให้กดแป้นลูกศรซ้าย

ส่วนขวามือของเอาต์พุตจากการเรียก systemctl ที่แสดงในโปรแกรมดูไฟล์น้อย

กดปุ่ม Q เพื่อออกจากน้อย คอลัมน์ที่แสดงคือ:

  • หน่วย : ชื่อของบริการหรือภูต คอลัมน์นี้มีชื่อว่า "หน่วย" เนื่องจากสิ่งที่อยู่ในคอลัมน์นี้เปิดตัวโดยใช้ระบบข้อมูล systemd พบในไฟล์หน่วย
  • Load : สถานะการโหลดของบริการหรือภูต สามารถโหลด ไม่พบ ตั้งค่าไม่ถูกต้อง ผิดพลาด หรือปิดบัง
  • Active : สถานะโดยรวมของบริการหรือ daemon สามารถแอ็คทีฟ โหลดซ้ำ ไม่ใช้งาน ล้มเหลว เปิดใช้งาน หรือปิดใช้งาน
  • SUB : สถานะย่อยของบริการหรือ daemon อาจเป็นตาย ออก ล้มเหลว ไม่ทำงาน หรือทำงานอยู่
  • Description : คำอธิบายสั้นๆ ของยูนิต

เราสามารถไพพ์เอาต์พุตของ systemctl ผ่าน grep หากเราต้องการเน้นที่บริการเดียว คำสั่งนี้แยกรายการตารางสำหรับบริการ ssh

 systemctl --type=service --state=run | grep ssh 

การใช้ grep เพื่อแยกบริการเดียวออกจากผลลัพธ์

จนถึงตอนนี้ เราได้กรองเนื้อหาของตารางโดยให้ตัวเลือก state=running เราสามารถใช้ค่าใดๆ ที่เป็นไปได้ของสถานะย่อยแทน: dead, exited, failed, inactive, or running

ลองดูบริการที่ล้มเหลว:

 systemctl --type=service --state=failed 

การรายงานเกี่ยวกับบริการที่ล้มเหลวด้วย systemctl

สามารถใช้ชุดค่าผสมของสถานะย่อยได้ พิมพ์เป็นรายการที่คั่นด้วยเครื่องหมายจุลภาค ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใส่ช่องว่างระหว่างตัวเลือก โปรดทราบว่าสิ่งนี้จะค้นหาบริการที่ตรงกับสถานะ ใด สถานะหนึ่ง

 systemctl --type=service --state=failed,exited 

ค้นหาบริการที่ล้มเหลวหรือออกจากระบบด้วย systemctl

การกดแป้นลูกศรขวาเพื่อดูคอลัมน์นอกหน้าจอแสดงว่าเรามีบริการที่ออกและล้มเหลวในรายการผสมกัน

พบการผสมผสานระหว่างบริการที่ล้มเหลวและออกจากระบบที่พบโดย systemctl

โดยค่าเริ่มต้น systemctl จะแสดงรายการกระบวนการ—บริการและ daemons— ที่เปิดใช้งานโดย systemd เนื่องจาก systemd พบไฟล์หน่วยที่มีไฟล์หน่วยที่ถูกต้องสำหรับพวกเขา นั่นเป็นเหตุผลที่คำชวเลขสำหรับกระบวนการทั้งหมดเหล่านี้คือ "หน่วย"

มีตัวเลือกให้ร้องขอ systemctl อย่างชัดแจ้งเพื่อแสดงรายการหน่วย แต่เนื่องจากเป็นการดำเนินการเริ่มต้น จึงไม่ค่อยได้ใช้

คำสั่งเหล่านี้ให้ผลลัพธ์เหมือนกัน

 sudo systemctl รายการหน่วย --type=service --state=running
 sudo systemctl --type=service --state=running

การใช้ systemctl เพื่อแสดงรายการไฟล์หน่วย

เราสามารถขยายขอบเขตของคำสั่ง systemctl โดยรวมตัวเลือก list-unit-files นี่ไม่ใช่แค่รายงานเกี่ยวกับบริการและ daemons ที่เปิดตัวเท่านั้น แต่ยังแสดงรายการ ไฟล์หน่วยทั้งหมดที่ ติดตั้งในคอมพิวเตอร์ของคุณ

 systemctl list-unit-files --state=enabled 

แสดงรายการไฟล์หน่วยด้วย systemctl

ตารางสีจะปรากฏขึ้น

รายการไฟล์หน่วยที่สร้างโดย systemctl แสดงในเบราว์เซอร์ไฟล์น้อย

การลบตัวเลือก state จะลบการกรองออก เอาต์พุตจะมีไฟล์ยูนิตที่ติดตั้งทั้งหมด โดยไม่คำนึงถึงสถานะ

 systemctl list-unit-files 

ใช้ systemctl เพื่อแสดงรายการไฟล์หน่วยที่ไม่มีการกรอง

ผลลัพธ์จะมีรายการมากกว่าผลลัพธ์จากคำสั่งก่อนหน้า

ไฟล์หน่วยทั้งหมดที่ระบุโดย systemctl และแสดงในเบราว์เซอร์ไฟล์น้อยกว่า

รายการผลลัพธ์ในคอมพิวเตอร์ทดสอบของเรานั้นยาวกว่าผลลัพธ์ของคำสั่งก่อนหน้าเกือบสี่เท่า

หากคุณต้องการใช้ตัวเลือก state คุณสามารถใช้หลายสถานะกับมันได้ดังที่เราเห็นก่อนหน้านี้ ใช้กฎเดียวกัน ระบุตัวเลือกเป็นค่าที่คั่นด้วยจุลภาคและไม่ต้องเว้นวรรค

คำสั่งนี้จะแสดงรายการไฟล์หน่วยทั้งหมดที่ถูกปิดใช้งานหรือไม่สามารถเปิดได้

 systemctl list-unit-files --state=enabled,failed 

ใช้ systemctl เพื่อค้นหาไฟล์หน่วยที่ตรงกับสถานะใดสถานะหนึ่ง

จำนวนผลลัพธ์ที่ลดลงจะแสดงขึ้น กรองตามการเลือกที่คุณเลือกด้วยตัวเลือกสถานะ

พบไฟล์ผสมของไฟล์ยูนิตที่ถูกปิดใช้งานและล้มเหลวโดย systemctl

มองที่หนึ่งบริการในรายละเอียด

หากมีบางอย่างเกี่ยวกับบริการหรือ daemon หนึ่งรายการที่คุณสนใจและสมควรได้รับการดำน้ำลึก คุณสามารถดูรายละเอียดได้โดยใช้ตัวเลือกสถานะ systemctl

มาดู SSH daemon, sshd กัน สิ่งที่เราต้องทำคือใช้ตัวเลือกสถานะและชื่อของบริการหรือภูต

 สถานะ systemctl sshd 

รายละเอียดของบริการเดียวที่แสดงโดย systemctl

จอแสดงผลขนาดกะทัดรัดนี้แสดง:

  • ชื่อบริการพร้อมคำอธิบายสั้นๆ จุดที่มีรหัสสีแสดงว่ากำลังทำงานอยู่หรือไม่ สีเขียวหมายถึงกำลังวิ่ง สีแดงหมายความว่าไม่ได้วิ่ง
  • สิ่งที่ถูกโหลด รวมถึงพาธไปยังไฟล์หน่วย
  • วิ่งมานานแค่ไหน.
  • ตำแหน่งที่เอกสารอยู่ในคู่มือ man
  • รหัสกระบวนการของอินสแตนซ์ที่ทำงานอยู่
  • จำนวนอินสแตนซ์ของบริการนี้ทำงานพร้อมกันกี่ตัว มักจะเป็นหนึ่ง
  • กำลังใช้หน่วยความจำเท่าใด
  • ใช้เวลา CPU ไปเท่าใด
  • กลุ่มควบคุมที่เป็นของบริการ

รายการที่เกี่ยวข้องจากบันทึกของระบบจะแสดงด้วย สิ่งเหล่านี้มักเป็นเหตุการณ์เช่นการเริ่มต้นบริการ ข้อมูลเหล่านี้อาจเป็นข้อมูลหากคุณกำลังค้นหาบริการหรือภูตที่ไม่ได้เปิดใช้อย่างถูกต้อง

ที่เกี่ยวข้อง: วิธีใช้ journalctl เพื่ออ่านบันทึกระบบ Linux

ระบบอัตโนมัติ

บริการและ daemons มีการดำเนินการอัตโนมัติมากมายสำหรับระบบปฏิบัติการของคุณ ดังนั้นสิ่งเหล่านี้จึงมีความสำคัญ นั่นหมายความว่าสุขภาพของพวกเขาก็มีความสำคัญเช่นกัน

การรับมุมมองเกี่ยวกับบริการ daemons และไฟล์หน่วยเป็นเรื่องง่ายและให้ข้อมูล นอกจากนี้ยังเป็นขั้นตอนการแก้ไขปัญหาที่มีคุณค่าหากบริการหรือภูตปฏิเสธที่จะเริ่มต้น

ที่เกี่ยวข้อง: วิธีแก้ไขข้อผิดพลาด "ไฟล์ที่เปิดมากเกินไป" บน Linux