জেনেরিক পদ্ধতিটি সিস্টেমে ডিবাগ ক্রম সক্রিয় করতে to


23

আমি থ্রেড অনুসরণ এবং এটির একটি উত্তর সম্ভবত অনুধাবন করছি । উত্তর ব্যতীত জেনেরিক অর্থে কোনও উত্তর নয়। এটি বলে যে সমস্যাটি একটি বিশেষ ক্ষেত্রে কী ছিল তবে সাধারণভাবে নয়।

আমার প্রশ্ন হ'ল: জেনেরিক উপায়ে অর্ডার সাইকেলটি ডিবাগ করার কোনও উপায় আছে কি? উদাহরণস্বরূপ: একটি আদেশ আছে যা চক্রটি বর্ণনা করবে এবং কোন এককে অন্য ইউনিটের সাথে যুক্ত করবে?

উদাহরণস্বরূপ, আমি নিম্নলিখিত অনুসরণ করেছি journalctl -b(দয়া করে তারিখ উপেক্ষা করুন, আমার সিস্টেমের সাথে সময় সিঙ্ক করার কোনও আরটিসি নেই):

Jan 01 00:00:07 host0 systemd[1]: Found ordering cycle on sysinit.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on local-fs.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on cvol.service/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on basic.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on sockets.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on dbus.socket/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on sysinit.target/start
Jan 01 00:00:07 host0 systemd[1]: Breaking ordering cycle by deleting job local-fs.target/start
Jan 01 00:00:07 host0 systemd[1]: Job local-fs.target/start deleted to break ordering cycle starting with sysinit.target/start

যেখানে cvol.service (যার পরিচিতি ঘটেছে, এবং যা চক্রটি ভেঙে দেয়) তা হ'ল:

[Unit]
Description=Mount Crypto Volume
After=boot.mount
Before=local-fs.target

[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/bin/cryptsetup open /dev/*** cvol --key-file /boot/***

[Install]
WantedBy=home.mount
WantedBy=root.mount
WantedBy=usr-local.mount

জার্নালটেল অনুসারে, সিভল.সার্ভিস বেসিক.সর্বিস চায়, এটি না করে, কমপক্ষে স্পষ্টতই নয়। এই লিঙ্কটি কোথা থেকে এসেছে এমন কোনও আদেশ রয়েছে যা প্রদর্শিত হবে? এবং সাধারণভাবে, একটি আদেশ আছে, যা চক্রটি খুঁজে বের করে এবং চক্রের প্রতিটি লিঙ্কটি যেখানে উত্পন্ন হয় তা প্রদর্শন করবে?

উত্তর:


20

এই লিঙ্কটি কোথা থেকে এসেছে এমন কোনও আদেশ রয়েছে যা প্রদর্শিত হবে?

আপনি করতে পারেন সবচেয়ে কাছাকাছি systemctl show -p Requires,Wants,Requisite,BindsTo,PartOf,Before,After cvol.service, যা প্রদত্ত ইউনিটের ফলাফল (কার্যকর) নির্ভরতা তালিকা প্রদর্শন করবে।

একটি আদেশ আছে, যা চক্রটি সন্ধান করবে এবং দেখায় যে চক্রের প্রতিটি লিঙ্কটি উত্পন্ন হয়?

আমার জানা মতে, এরকম কোনও আদেশ নেই। প্রকৃতপক্ষে সিস্টেমড ডিবাগিং ক্রমচক্র (দীর্ঘশ্বাস) এ সহায়তা করার জন্য কিছুই দেয় না।

জার্নালটেল অনুসারে, সিভল.সার্ভিস বেসিক.সর্বিস চায়, এটি না করে, কমপক্ষে স্পষ্টতই নয়।

প্রথমত, প্রয়োজন নির্ভরতা ( Wants=, Requires=, BindsTo=ইত্যাদি) ক্রম নির্ভরতা (স্বাধীন Before=এবং After=)। আপনি এখানে যা দেখতে পান সেটি অর্ডিং নির্ভরতা চক্র, অর্থাত্ এর সাথে এর কোনও যোগসূত্র নেই Wants=etc.

দ্বিতীয়ত, নির্দিষ্ট ধরণের ইউনিটের মধ্যে বেশ কয়েকটি "ডিফল্ট নির্ভরতা" তৈরি হয়। তারা বিভাগে DefaultDependencies=নির্দেশ দ্বারা নিয়ন্ত্রিত হয় [Unit](যা ডিফল্টরূপে সক্ষম হয় )।

বিশেষত, যদি না এই নির্দেশটি স্পষ্টভাবে অক্ষম না করা হয়, কোনও .serviceটাইপ ইউনিট অন্তর্নিহিত Requires=basic.targetএবং After=basic.targetনির্ভরতা পায় , যা আপনি যা দেখতে পান ঠিক তেমনই । এটি systemd.service (5) এ নথিভুক্ত করা হয়েছে ।


আপনার উদ্ধৃত কমান্ডটি নিখুঁতভাবে কাজ করেছে, এবং প্রকৃতপক্ষে বেসিক.টারাজেটের উপর নির্ভরতা প্রকাশ করেছে। এটি একটি লজ্জার বিষয় যে সিস্টেমেস্টিটেলের জন্য টুলসেটের এত অভাব রয়েছে, তবে ওহ ভাল, এটি একটি নতুন প্রকল্প
18

2
@ গ্যালেটস: আমার অভিজ্ঞতাটি বিবেচনা করে জানাচ্ছি যে এ জাতীয় ঘাটতির খুব কম উদাহরণ রয়েছে ... সম্ভবত কোনও দিন আমি চক্রের প্রতিবেদকের ক্রমবর্ধমানতা ঘটাব এবং লগের জন্য কিছু দরকারী তথ্য যুক্ত করব। এদিকে, আসলে, আপনি systemd-analyze verify UNITইউনিটের নির্ভুলতা পরীক্ষা করতে ব্যবহার করতে পারেন । পর্দার আড়ালে, এই কমান্ডটি ভার্চুয়াল সিস্টেমযুক্ত উদাহরণ তৈরি করে এবং প্রদত্ত ইউএনআইটিটিকে প্রাথমিক লেনদেন (যেমন এটি ছিল default.target) হিসাবে লোড করার চেষ্টা করে । এটি কোনও নতুন তথ্য (লগগুলির সাথে তুলনা করে) প্রকাশ করবে না, তবে কমপক্ষে আপনাকে ইউনিটটি ব্যর্থ হয়েছে কিনা তা সক্ষম হয়ে পুনরায় বুট করতে হবে না।
ইন্টেলএফএক্স

বর্ধিতকরণের জন্য
সিস্টেম্ট

20

আপনি কমান্ড সহ চক্র দৃশ্য কল্পনা করতে পারেন systemd-analyze verify, systemd-analyze dotএবং Graphviz dot টুল:

systemd-analyze verify default.target |&
perl -lne 'print $1 if m{Found.*?on\s+([^/]+)}' |
xargs --no-run-if-empty systemd-analyze dot |
dot -Tsvg >cycle.svg

আপনার এমন কিছু দেখা উচিত:

এখানে চিত্র বর্ণনা লিখুন

এখানে আপনি চক্রটি দেখতে পারেন: c.service->b.service->a.service->c.service

Color legend: 
    black     = Requires
    dark blue = Requisite
    dark grey = Wants
    red       = Conflicts
    green     = After

লিঙ্ক:


systemd-analyze verifyএখানে কোনও ডেবিয়ান 8 ইনস্টলের উপস্থিতি নেই।
sjas

@ এসজেস, যেহেতু systemd-analyze verify উপলভ্যv216 । চেষ্টা systemd-verify। এটি কি বিদ্যমান?
ইভজেনি Vereshchagin

: HM, এটা জেসি উপস্থিত না anonscm.debian.org/cgit/pkg-systemd/systemd.git/tree/debian/...
Evgeny Vereshchagin

1
systemd-analyze verify default.targetনিজে থেকে লুপটি দেখানোর জন্য একটি শালীন কাজ করে ...
গার্ট ভ্যান ড্যান বার্গ

0

পদক্ষেপ 1: default.target জন্য যাচাইকরণ কমান্ড চালান

systemd-analyze verify default.target

পদক্ষেপ 2: "চাকরী মোছার মাধ্যমে সিস্টেমড ব্রেকিং অর্ডার চক্র" বার্তায় উল্লিখিত কোন পরিষেবা বা লক্ষ্য লক্ষ্য করুন এবং এটি সম্পূর্ণ নির্ভরতা তালিকা প্রদর্শন করুন

systemctl show -p Requires,Wants,Requisite,BindsTo,PartOf,Before,After <service or target name mentioned in the "breaking cycle" message>

পদক্ষেপ 3: পরিষেবা বা টার্গেট ফাইলের ভিতরে সাধারণত "পরে" এবং "পূর্বে" গ্রুপগুলি দেখুন look

/lib/systemd/system

এবং পরিষেবাগুলি বা লক্ষ্যগুলি সিক্যুয়াল হিসাবে সুপরিচিত তবে এটির জন্য বহির্মুখী ক্রমে রয়েছে।

উদাহরণ:

dbus.service

সাধারণত বাজার "পরে"

multi-user.target

তবে "আগে"

sockets.target

এই ধরনের নির্ভরতা কল করে সহজেই লক্ষ করা যায়

systemctl list-dependencies default.target

তবে ফাইল যদি

/lib/systemd/system/dbus.service

লাইনগুলি যেমন:

Before=multi-user.target

অথবা

After=sockets.target

বা উভয় একই সাথে, এর অর্থ dbus.service বহির্মুখী সংজ্ঞায়িত এবং এটি একটি সিস্টেমযুক্ত অন্তহীন চক্রের কারণ।

প্রতিকারও পরিবর্তন শব্দ - সহজ "পরে" থেকে "আগে" এবং ভাইস বিপরীতভাবে প্রয়োজনে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.