सवाल Systemd के निष्पादन पेड़ को देखने का कोई तरीका है?


सवाल के तहत मेरा क्या मतलब है: आदेश दिया गया सूची (जैसे प्रक्रियाओं के लिए pstree करता है) को डंप करने का कोई तरीका है यह देखने के लिए कि कैसे इकाइयों के आपूर्ति किए गए सेट को व्यवस्थित किया गया है, यानि निर्भरता के बाद पेड़ का समाधान किया गया था और निष्पादन के लिए नौकरियां कतारबद्ध थीं ? मुझे पता है कि आप इसे व्यवस्थित राज्य डेटा का विश्लेषण करके कर सकते हैं, लेकिन क्या ऐसे पेड़ को देखने का एक त्वरित तरीका है? यह विफलता जांच में बहुत मदद करेगा (उदाहरण के लिए यदि आप देखते हैं कि बूट इकाई कुछ इकाई पर फंस गई थी तो आप अपनी गहरी जांच के लिए अनुमानित स्थान को इंगित करने में सक्षम होंगे।


44
2017-08-02 10:10


मूल


मैंने systemd के लिए एक विज़ुअलाइज़ेशन टूल बनाया है। आप टूल को चेक और आज़मा सकते हैं github.com/ywiyogo/systemd-visual - Yongkie


जवाब:


systemd-analyze आपका दोस्त है। उदाहरण के लिए systemd-analyze critical-chain डेमन्स के पेड़ को अवरुद्ध करने का उत्पादन करता है। उदाहरण के लिए मेरा:

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

नेटवर्क मैनेजर उदाहरण में मूल रूप से पूरे बूटअप को पकड़ रहा है।

यदि आप अधिक विस्तृत दृश्य देखना चाहते हैं तो आप एक svg फ़ाइल में संपूर्ण निष्पादन श्रृंखला प्रस्तुत कर सकते हैं। systemd-analyze plot > something.svg पूरे श्रृंखला (120+ मॉड्यूल) को प्रगति सलाखों के रूप में उच्च-res svg फ़ाइल में आउटपुट करता है जो राज्यों को दिखाता है, जो अवरुद्ध हैं और एक और समस्याएं हैं।

अंत में आपके पास है systemd-analyze dot उपकरण जो डॉट फ़ाइल आउटपुट करता है जो पूरे पदानुक्रम को आउटपुट करता है: systemd-analyze dot | dot -Tpng -o stuff.png डॉट टूल के साथ आप इसे पीएस और एसवीजी फाइलों के रूप में भी आउटपुट कर सकते हैं।

उपर्युक्त सभी उपकरण सिस्टम-विश्लेषण टूल में अंतर्निहित हैं जो डिफ़ॉल्ट रूप से archlinux में systemd के साथ डिफ़ॉल्ट रूप से आता है। मुझे लगता है कि कुछ तीसरे पक्ष की परियोजनाएं भी इससे निपट रही हैं।


54
2017-08-04 18:57



आपके उत्तर के लिए धन्यवाद, हालांकि यह प्रश्नों का समाधान नहीं करता है और केवल मेरे प्रश्न के कुछ हिस्सों को दोहराता है (मैंने उल्लेख किया है कि मुझे सिस्टम डी के डेटा डेटा का विश्लेषण करके इसे कैसे करना है) के बारे में पता है। इसलिए सवाल यह है कि सभी निर्भरताओं को हल करने के बाद बूट अप अनुक्रम के एक पस्ट्री-जैसे पेड़ को कैसे प्राप्त किया जाए (उदा। पोस्ट-बूट)। महत्वपूर्ण श्रृंखला लगभग है (इसके बावजूद यह एक नीचे पेड़ है) लेकिन सभी शुरू इकाइयों की सूची नहीं है। प्रश्न में क्या पूछा जाता है: एक पेड़ जो प्रत्येक इकाई को सूचीबद्ध करता है जिसे कुछ बिंदु तक निष्पादित किया गया था (उदाहरण के लिए बहु-user.target को मारना)। - galaxy
systemd-analyze plot > something.svg लक्ष्य के साथ निष्पादन के पूर्ण तीन है (यह आप चाहते हैं कि निकटतम है)। systemd-विश्लेषण डॉट निर्भरताओं का पूरा ग्राफ है (यह सबसे सही प्रतिनिधित्व है)। क्या आप ये नहीं चाहते हैं? साजिश में केवल लक्ष्य ढूंढें और देखें कि इसे भी क्या चलाना चाहिए। वही निर्भरता बिल्कुल सूचीबद्ध ग्राफ हैं, यदि यह कुछ ग्राफ विश्लेषण टूलकिट को बहुत अधिक आग लगाना है और ग्राफ़ पॉइंट का चयन करें जिसके लिए आप निर्भरता देखना चाहते हैं (डॉट टूल में और सेटिंग्स हैं)। मैन पेज देखें: freedesktop.org/software/systemd/man/systemd-analyze.html  - और इसी तरह के - IBr
मैन पेज से: यह किसी भी यूनिट की सभी निर्भरताओं को प्लॉट करता है जिसका नाम "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
आईबीआर, लेकिन दुर्भाग्यवश, पाठ कंसोल में यह अनुपयोगी है। मैं वास्तव में उत्तर पर खर्च किए गए समय की सराहना करता हूं (और यदि आप विश्लेषण करने के लिए कुछ डेटा प्राप्त करना चाहते हैं तो यह सही है), लेकिन यह मूल प्रश्न को संबोधित नहीं करता है, इसलिए मैं इसे स्वीकार कर सकता हूं। माफ़ कीजिये। - galaxy
ठीक, कोई समस्या नहीं। मुझे कमांड लाइन टूल्स पसंद है :) - IBr


अभी भी आपके प्रश्न का पूरी तरह से जवाब नहीं दे सकता है लेकिन इसके साथ प्रयास करें --fuzz विकल्प

systemd-analyze critical-chain --fuzz 1h

नोट आप इकाई निर्दिष्ट भी कर सकते हैंरों उन्हें देखने के लिए महत्वपूर्ण श्रृंखला, तो आप तक ही सीमित नहीं हैं multi-user.target

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

उम्मीद है की यह मदद करेगा


9
2017-10-22 23:30





निश्चित नहीं है कि मैं प्रश्न को सही ढंग से समझता हूं, लेकिन निम्न आदेशों के साथ पेड़ दृश्यता उपलब्ध हैं:

sudo systemctl status

और भी :

sudo systemctl list-dependencies 

उम्मीद है की यह मदद करेगा :)

साथ ही, यह systemctl symlinks फ़ोल्डर्स का पेड़ बनाने के अन्य उद्देश्यों के लिए उपयोगी हो सकता है:

tree /etc/systemd/system

यह वास्तव में पुरानी / छोटी गाड़ी इकाइयों को समझने में वास्तव में उपयोगी था जो मेरे सिस्टम स्टार्टअप को धीमा कर रहे थे, बाद में उन्हें अक्षम करने के लिए अक्षम systemctl disable आदेश।

संपादित करें

मैंने कहा कि मैं वास्तव में ओपी के साथ सहमत हूं कि यह मूल कार्यक्षमता कमांड लाइन उपकरण के माध्यम से दी जानी चाहिए, न कि ग्राफिकल टूल ... यदि आप एक्स शुरू नहीं कर सकते हैं तो क्या होगा? फिर आप अपनी svg फ़ाइल से कैसे निपटते हैं?

दरअसल, एक रास्ता है। यदि आप उपयोग नहीं कर सकते हैं scp (एसएसएच उपकरण) अपनी फाइल को किसी अन्य कंप्यूटर पर लाने के लिए, fbi वास्तव में आपकी मदद कर सकता है :)

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

मेरे टीटीवी में काम किया। तीर के साथ तस्वीर के अंदर बस नेविगेट करें। सूची करने के लिए ज़ूमिंग विकल्प हैं fbi -h

फिर मुझे उम्मीद है कि यह मदद करता है। यह आर्कलिनक्स और उबंटू रिपोस में उपलब्ध है।

संपादित करें 2:

fbi एसएसएच पर काम नहीं करता है। आप इस तरह एक्स अग्रेषण कर सकते हैं ssh -Y user@server, लेकिन आपको अपने रिमोट सर्वर पर चल रहे एक्स सर्वर की आवश्यकता है।

यहां सबसे अच्छी शर्त का उपयोग करना है sshfs। यह यूजर स्पेस में ग्रेट काम करता है, उदाहरण के लिए नॉटिलस के साथ। करने के लिए एक छोटी विन्यास है, देखें:

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

8
2018-02-13 13:02



सवाल निर्भरता संकल्प के बाद सिस्टम के सभी सक्रिय इकाइयों के लिए निष्पादन पेड़ के बारे में है। तो यह जवाब एक मिस है। - galaxy
शायद आपका प्रश्न फीचर अनुरोध के लिए उपयुक्त है? यकीन है कि यह मदद करेगा। वैसे भी, मैंने आपके प्रश्न पर ठोकर खाने के बाद यह जवाब पोस्ट किया क्योंकि यह किसी अन्य प्रश्न के समान था, मुझे कुछ जानकारी चाहिए, और मुझे लगा कि कुछ बुनियादी उदाहरणों में कमी आई है (जैसे आपने कोशिश की है और काम नहीं किया है - वास्तव में स्पष्टीकरण में मदद की), विशेष रूप से मेरे जैसे लोगों के लिए सिस्टम वी इनिट और उनकी आसान rc.conf फ़ाइल खोने के बाद संघर्ष कर रहा है। क्षमा करें मेरा जवाब फिट नहीं हुआ। हालांकि डाउनवोट के लायक नहीं है। - Joel.O
आपकी समस्या के समाधान के साथ संपादित किया गया। उम्मीद है कि यह फिर से मदद करता है। - Joel.O
मैं अपने सर्वर पर एसएसएच पर एफबीआई का उपयोग करने में सक्षम नहीं था। परंतु sshfs बेहतर काम करता है। संपादित करें 2 देखें। - Joel.O