มีวิธีดูแผนผังการทำงานของ systemd หรือไม่?


63

สิ่งที่ฉันหมายถึงภายใต้คำถามคือ: มีวิธีการถ่ายโอนข้อมูลรายการสั่งซื้อ (เช่น pstree ทำสำหรับกระบวนการ) เพื่อดูว่า systemd ดำเนินการชุดของหน่วยจัดให้เช่นต้นไม้หลังจากการอ้างอิงได้รับการแก้ไขและงานถูกจัดคิวสำหรับการดำเนินการ ? ฉันรู้ว่าคุณสามารถทำได้โดยการวิเคราะห์ข้อมูลสถานะ systemd แต่มีวิธีที่รวดเร็วในการดูต้นไม้แบบนี้หรือไม่? มันจะช่วยได้มากในการตรวจสอบความล้มเหลว (เช่นหากคุณเห็นว่ากระบวนการบูตติดอยู่ในบางหน่วยคุณจะสามารถระบุตำแหน่งโดยประมาณสำหรับการตรวจสอบที่ลึกกว่าของคุณ


ฉันได้สร้างเครื่องมือ visualiztion สำหรับ systemd คุณสามารถตรวจสอบและลองใช้เครื่องมือในgithub.com/ywiyogo/systemd-visual
Yongkie

คำตอบ:


71

systemd-analyzeเป็นเพื่อนของคุณ. ตัวอย่างเช่นsystemd-analyze critical-chainการปิดกั้นต้นไม้ของ daemons ตัวอย่างเช่น:

graphical.target @20.211s
└─multi-user.target @20.211s
  └─nginx.service @19.348s +862ms
    └─network.target @19.347s
      └─NetworkManager.service @10.315s +9.031s
        └─basic.target @10.312s
          └─timers.target @10.311s
            └─systemd-tmpfiles-clean.timer @10.311s
              └─sysinit.target @10.295s
                └─systemd-update-utmp.service @10.167s +127ms
                  └─systemd-tmpfiles-setup.service @10.124s +41ms
                    └─local-fs.target @10.097s
                      └─home-entd-Downloads.mount @10.093s +2ms
                        └─home.mount @9.326s +672ms
                          └─systemd-fsck@dev-sda6.service @8.472s +696ms
                            └─dev-sda6.device @8.471s

NetworkManager ในตัวอย่างโดยทั่วไปถือ bootup ทั้งหมด

หากคุณต้องการมีมุมมองที่ละเอียดยิ่งขึ้นคุณสามารถแสดงการประมวลผลทั้งหมดในไฟล์ svg systemd-analyze plot > something.svgส่งออกโซ่ทั้งหมด (โมดูล 120+) เป็นแถบความคืบหน้าไปยังไฟล์ svg ความละเอียดสูงซึ่งแสดงสถานะที่ถูกบล็อกและปัญหาอื่น

ในที่สุดคุณก็มีsystemd-analyze dotเครื่องมือที่ไฟล์ dot เอาท์พุทซึ่งส่งออกลำดับชั้นทั้งหมด: systemd-analyze dot | dot -Tpng -o stuff.png ด้วยเครื่องมือ dot คุณสามารถส่งออกเป็นไฟล์ ps และ svg ได้เช่นกัน

เครื่องมือทั้งหมดข้างต้นเป็นเครื่องมือใน systemd-analysis ที่มาพร้อมกับ systemd ใน archlinux เป็นอย่างน้อย ฉันคิดว่ามีโครงการของบุคคลที่สามที่จัดการกับมันเช่นกัน


ขอบคุณสำหรับคำตอบของคุณอย่างไรก็ตามมันไม่ได้ตอบคำถามและเพียงแค่ย้ำบางส่วนของคำถามของฉัน (ฉันบอกว่าฉันรู้วิธีที่จะทำได้โดยการวิเคราะห์ข้อมูลสถานะของ systemd) ดังนั้นคำถามคือทำอย่างไรจึงจะได้แผนภูมิลำดับเหมือนบูทของลำดับการบู๊ตขึ้นมาหลังจากแก้ไขการอ้างอิงทั้งหมดแล้ว (เช่นโพสต์บูต) สายโซ่วิกฤตนั้นเกือบจะถึง (แม้จะเป็นสายล่างขึ้นบน) แต่ไม่ได้แสดงรายการหน่วยเริ่มต้นทั้งหมด สิ่งที่ถูกถามในคำถาม: ต้นไม้ที่แสดงทุกหน่วยเดียวที่ถูกดำเนินการจนถึงบางจุด (เช่นการกดปุ่ม multi-user.target)
กาแล็กซี่

4
systemd-analyze plot > something.svgเต็มไปด้วยการดำเนินการกับเป้าหมายสามรายการ (ใกล้เคียงที่สุดกับสิ่งที่คุณต้องการ) systemd-analysis dot เป็นกราฟแบบเต็มของการอ้างอิง (เป็นการแสดงที่ถูกต้องที่สุด) สิ่งเหล่านี้ไม่ใช่สิ่งที่คุณต้องการ? ในพล็อตแค่ค้นหาเป้าหมายและดูว่ามันต้องการอะไรมาก การอ้างอิงที่เหมือนกันคือกราฟที่แสดงรายการทั้งหมดหากมันทำให้เครื่องมือการวิเคราะห์กราฟบางอย่างสว่างขึ้นและเลือกจุดกราฟที่คุณต้องการดูการพึ่งพา (เครื่องมือจุดมีการตั้งค่าเพิ่มเติม) ดู man page: freedesktop.org/software/systemd/man/systemd-analyze.html - ลำดับและคล้ายกัน
IBr

1
จาก man page: พล็อตนี้เป็นการอ้างอิงทั้งหมดของหน่วยใด ๆ ที่ชื่อขึ้นต้นด้วย "avahi-daemon.": พ $ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg $ eog avahi.svgล็อตนี้เป็นการพึ่งพาระหว่างหน่วยเป้าหมายที่รู้จักทั้งหมด:systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg $ eog targets.svg
IBr

1
IBr แต่ไม่สามารถใช้งานได้ในคอนโซลข้อความขออภัย ฉันซาบซึ้งจริง ๆ เวลาที่คุณใช้กับคำตอบ (และถูกต้องถ้าคุณต้องการรับข้อมูลเพื่อวิเคราะห์) แต่มันไม่ได้ตอบคำถามเดิมดังนั้นฉันสามารถยอมรับได้ ขอโทษ
กาแล็กซี่

1
ได้ไม่มีปัญหา. ฉันรักเครื่องมือบรรทัดคำสั่งตัวเอง :)
IBR

13

อาจยังไม่ตอบคำถามของคุณอย่างเต็มที่ แต่ลองใช้--fuzzตัวเลือก

systemd-analyze critical-chain --fuzz 1h

หมายเหตุนอกจากนี้คุณยังสามารถระบุหน่วยsเพื่อดูเครือข่ายที่สำคัญของพวกเขาดังนั้นคุณไม่ได้ จำกัด อยู่ที่multi-user.target

systemd-analyze critical-chain network.target local-fs.target

หวังว่านี่จะช่วยได้


12

ไม่แน่ใจว่าฉันเข้าใจคำถามอย่างถูกต้อง แต่มีการสร้างภาพต้นไม้พร้อมใช้งานด้วยคำสั่งต่อไปนี้:

sudo systemctl status

และนอกจากนี้ยังมี :

sudo systemctl list-dependencies 

หวังว่าจะช่วย :)

นอกจากนี้อาจเป็นประโยชน์สำหรับวัตถุประสงค์อื่นในการสร้างแผนผังของโฟลเดอร์ symlink systemctl:

tree /etc/systemd/system

จริงๆแล้วมันมีประโยชน์จริง ๆ ที่จะคิดออกหน่วยเก่า / รถที่ชะลอตัวเริ่มต้นระบบของฉันเพื่อปิดการใช้งานหลังจากนั้นโดยใช้systemctl disableคำสั่ง

แก้ไข

ที่กล่าวว่าฉันเห็นด้วยกับ OP ว่าการทำงานขั้นพื้นฐานนี้ควรได้รับผ่านเครื่องมือบรรทัดคำสั่งไม่ใช่เครื่องมือกราฟิก ... ถ้าคุณไม่สามารถเริ่ม X คุณจัดการกับไฟล์ svg ของคุณอย่างไร?

จริงๆแล้วมีวิธีหนึ่งคือ หากคุณไม่สามารถใช้scp(เครื่องมือ ssh) เพื่อดึงไฟล์ของคุณบนคอมพิวเตอร์เครื่องอื่นfbiอาจช่วยคุณได้จริง :)

sudo systemd-analyze plot > /home/user/startup.svg
fbi /home/user/startup.svg

ทำงานใน TTY ของฉัน เพียงนำทางภายในรูปภาพด้วยลูกศร fbi -hมีตัวเลือกการซูมไปยังรายการทำอยู่

ฉันหวังว่านี่จะช่วยได้อีก มันมีอยู่ใน repos Archlinux และ Ubuntu

แก้ไข 2:

fbiไม่ทำงานกับ ssh คุณสามารถทำการส่งต่อ X เช่นนี้ssh -Y user@serverได้ แต่คุณต้องมีเซิร์ฟเวอร์ X ที่ทำงานบนเซิร์ฟเวอร์ระยะไกลของคุณ

sshfsทางออกที่ดีที่สุดที่นี่คือการใช้ มันใช้งานได้ดีมากใน userspace เช่นกับ nautilus มีการกำหนดค่าเล็กน้อยที่ต้องทำดู:

sudo vim /etc/fuse.conf #type a, uncomment the user_allow_other line and ESC :wq
sudo mkdir /mnt/yourmountingdir
sudo chown user:user /mnt/yourmountingdir
sshfs user@remotemachine.com:/home/user /mnt/yourmountingdir/ -o allow_other #Asks for host trusting and password
sudo fusermount -u /mnt/yourmountingdir/ #To disconnect and unmount

คำถามเกี่ยวกับโครงสร้างการดำเนินการสำหรับ systemed units ทั้งหมดที่เปิดใช้งานผ่านไปหลังจากการแก้ปัญหาการพึ่งพา ดังนั้นคำตอบนี้เป็นพลาด
กาแล็กซี่

บางทีคำถามของคุณเหมาะสมสำหรับคำขอคุณสมบัติหรือไม่ แน่นอนว่ามันจะช่วย อย่างไรก็ตามฉันโพสต์คำตอบนี้หลังจากสะดุดกับคำถามของคุณเพราะมันคล้ายกับคำถามอื่นที่ฉันต้องการข้อมูลบางอย่างและฉันรู้สึกว่าตัวอย่างพื้นฐานบางอย่างขาดหายไป (เช่นสิ่งที่คุณพยายามและไม่ได้ผล - จริง ๆ แล้ว ช่วยอธิบาย) โดยเฉพาะอย่างยิ่งสำหรับคนอย่างฉันที่ต้องดิ้นรนหลังจากที่สูญเสีย System V init และไฟล์ rc.conf ที่มีประโยชน์ ขออภัยคำตอบของฉันไม่พอดี ไม่คุ้มค่ากับการลงคะแนนแม้ว่า
Joel.O

แก้ไขด้วยวิธีแก้ไขปัญหาของคุณ หวังว่ามันจะช่วยได้อีกครั้ง
Joel.O

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