วิธีการแสดงรายการบริการ Linux ด้วย systemctl
เผยแพร่แล้ว: 2022-10-23คอมพิวเตอร์ 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 หรือไม่ คือการตรวจสอบ เราสามารถทำได้โดยดูที่แผนผังกระบวนการด้วยคำสั่ง pstree
เราเพียงแค่ต้องเห็นส่วนบนสุดของแผนผัง—เรากำลังมองหากระบวนการแรกที่ดำเนินการ—ดังนั้น เราจะไพพ์เอาต์พุตผ่านคำสั่ง head
และขอห้ารายการแรก
pstree | หัว -5
เราจะเห็นได้ว่า systemd
เป็นกระบวนการแรกที่รันหลังจากบูท ดังนั้นเราจึงติดตั้ง Linux บน systemd อย่างแน่นอน
ที่เกี่ยวข้อง: วิธีจัดการกระบวนการจาก Linux Terminal: 10 คำสั่งที่คุณต้องรู้
การใช้ systemctl เพื่อแสดงรายการบริการ
คำสั่งสำหรับแสดงรายการ services และ daemons คือ systemctl
เราสามารถปรับแต่งคำสั่ง systemctl
ด้วยตัวเลือก type
และ state
เรากำลังขอให้ systemctl
รายงานเกี่ยวกับบริการที่อยู่ในสถานะกำลังทำงาน
systemctl --type=service --state=running
มีการสร้างตารางข้อมูล ถ้ามันกว้างหรือยาวเกินไปสำหรับหน้าต่างเทอร์มินัลของคุณ ไฟล์นั้นจะแสดงในโปรแกรมดูไฟล์เริ่มต้นของคุณ ซึ่งมีแนวโน้มว่าจะ less
หากต้องการดูจุดสิ้นสุดทางขวามือของตาราง ให้กดแป้นลูกศรขวา หากต้องการกลับไปที่มุมมองปกติ ให้กดแป้นลูกศรซ้าย
กดปุ่ม Q เพื่อออกจากน้อย คอลัมน์ที่แสดงคือ:
- หน่วย : ชื่อของบริการหรือภูต คอลัมน์นี้มีชื่อว่า "หน่วย" เนื่องจากสิ่งที่อยู่ในคอลัมน์นี้เปิดตัวโดยใช้ระบบข้อมูล
systemd
พบในไฟล์หน่วย - Load : สถานะการโหลดของบริการหรือภูต สามารถโหลด ไม่พบ ตั้งค่าไม่ถูกต้อง ผิดพลาด หรือปิดบัง
- Active : สถานะโดยรวมของบริการหรือ daemon สามารถแอ็คทีฟ โหลดซ้ำ ไม่ใช้งาน ล้มเหลว เปิดใช้งาน หรือปิดใช้งาน
- SUB : สถานะย่อยของบริการหรือ daemon อาจเป็นตาย ออก ล้มเหลว ไม่ทำงาน หรือทำงานอยู่
- Description : คำอธิบายสั้นๆ ของยูนิต
เราสามารถไพพ์เอาต์พุตของ systemctl
ผ่าน grep
หากเราต้องการเน้นที่บริการเดียว คำสั่งนี้แยกรายการตารางสำหรับบริการ ssh
systemctl --type=service --state=run | grep ssh
จนถึงตอนนี้ เราได้กรองเนื้อหาของตารางโดยให้ตัวเลือก state=running
เราสามารถใช้ค่าใดๆ ที่เป็นไปได้ของสถานะย่อยแทน: dead, exited, failed, inactive, or running
ลองดูบริการที่ล้มเหลว:
systemctl --type=service --state=failed
สามารถใช้ชุดค่าผสมของสถานะย่อยได้ พิมพ์เป็นรายการที่คั่นด้วยเครื่องหมายจุลภาค ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใส่ช่องว่างระหว่างตัวเลือก โปรดทราบว่าสิ่งนี้จะค้นหาบริการที่ตรงกับสถานะ ใด สถานะหนึ่ง
systemctl --type=service --state=failed,exited
การกดแป้นลูกศรขวาเพื่อดูคอลัมน์นอกหน้าจอแสดงว่าเรามีบริการที่ออกและล้มเหลวในรายการผสมกัน
โดยค่าเริ่มต้น 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
ตารางสีจะปรากฏขึ้น
การลบตัวเลือก state
จะลบการกรองออก เอาต์พุตจะมีไฟล์ยูนิตที่ติดตั้งทั้งหมด โดยไม่คำนึงถึงสถานะ
systemctl list-unit-files
ผลลัพธ์จะมีรายการมากกว่าผลลัพธ์จากคำสั่งก่อนหน้า
รายการผลลัพธ์ในคอมพิวเตอร์ทดสอบของเรานั้นยาวกว่าผลลัพธ์ของคำสั่งก่อนหน้าเกือบสี่เท่า
หากคุณต้องการใช้ตัวเลือก state
คุณสามารถใช้หลายสถานะกับมันได้ดังที่เราเห็นก่อนหน้านี้ ใช้กฎเดียวกัน ระบุตัวเลือกเป็นค่าที่คั่นด้วยจุลภาคและไม่ต้องเว้นวรรค
คำสั่งนี้จะแสดงรายการไฟล์หน่วยทั้งหมดที่ถูกปิดใช้งานหรือไม่สามารถเปิดได้
systemctl list-unit-files --state=enabled,failed
จำนวนผลลัพธ์ที่ลดลงจะแสดงขึ้น กรองตามการเลือกที่คุณเลือกด้วยตัวเลือกสถานะ
มองที่หนึ่งบริการในรายละเอียด
หากมีบางอย่างเกี่ยวกับบริการหรือ daemon หนึ่งรายการที่คุณสนใจและสมควรได้รับการดำน้ำลึก คุณสามารถดูรายละเอียดได้โดยใช้ตัวเลือกสถานะ systemctl
มาดู SSH daemon, sshd กัน สิ่งที่เราต้องทำคือใช้ตัวเลือกสถานะและชื่อของบริการหรือภูต
สถานะ systemctl sshd
จอแสดงผลขนาดกะทัดรัดนี้แสดง:
- ชื่อบริการพร้อมคำอธิบายสั้นๆ จุดที่มีรหัสสีแสดงว่ากำลังทำงานอยู่หรือไม่ สีเขียวหมายถึงกำลังวิ่ง สีแดงหมายความว่าไม่ได้วิ่ง
- สิ่งที่ถูกโหลด รวมถึงพาธไปยังไฟล์หน่วย
- วิ่งมานานแค่ไหน.
- ตำแหน่งที่เอกสารอยู่ในคู่มือ
man
- รหัสกระบวนการของอินสแตนซ์ที่ทำงานอยู่
- จำนวนอินสแตนซ์ของบริการนี้ทำงานพร้อมกันกี่ตัว มักจะเป็นหนึ่ง
- กำลังใช้หน่วยความจำเท่าใด
- ใช้เวลา CPU ไปเท่าใด
- กลุ่มควบคุมที่เป็นของบริการ
รายการที่เกี่ยวข้องจากบันทึกของระบบจะแสดงด้วย สิ่งเหล่านี้มักเป็นเหตุการณ์เช่นการเริ่มต้นบริการ ข้อมูลเหล่านี้อาจเป็นข้อมูลหากคุณกำลังค้นหาบริการหรือภูตที่ไม่ได้เปิดใช้อย่างถูกต้อง
ที่เกี่ยวข้อง: วิธีใช้ journalctl เพื่ออ่านบันทึกระบบ Linux
ระบบอัตโนมัติ
บริการและ daemons มีการดำเนินการอัตโนมัติมากมายสำหรับระบบปฏิบัติการของคุณ ดังนั้นสิ่งเหล่านี้จึงมีความสำคัญ นั่นหมายความว่าสุขภาพของพวกเขาก็มีความสำคัญเช่นกัน
การรับมุมมองเกี่ยวกับบริการ daemons และไฟล์หน่วยเป็นเรื่องง่ายและให้ข้อมูล นอกจากนี้ยังเป็นขั้นตอนการแก้ไขปัญหาที่มีคุณค่าหากบริการหรือภูตปฏิเสธที่จะเริ่มต้น
ที่เกี่ยวข้อง: วิธีแก้ไขข้อผิดพลาด "ไฟล์ที่เปิดมากเกินไป" บน Linux