সিস্টেমড আগ্রাসী জরুরি শেল আচরণটি কীভাবে অক্ষম করবেন?


10

ডিফল্টরূপে systemd সামান্যতম ত্রুটিতে জরুরি শেল থেকে ফোঁটা। উদাহরণস্বরূপ, যদি কোনও কারণে fstab এ মাউন্টগুলি ব্যর্থ হয় তবে সিস্টেমটি তত্ক্ষণাত্ আনবুটযোগ্য হয়ে যায়। আমি কয়েক ডজন বিচিত্র উত্পাদন ব্যবস্থা পরিচালনা করি এবং আমি এই আচরণটি অত্যন্ত ক্ষতিকর বলে মনে করি। (আসলে আমি মনে করি এটি একটি বড় নকশা ব্যর্থতা, তবে এটি একটি ব্যক্তিগত মতামত)।

আমি সিস্টেম বুটের স্থিতিস্থাপকতা বাড়াতে চাই। সর্বোত্তমভাবে সিস্টেমটি সর্বদা বুটআপ করা উচিত, ড্রাইভার, মাউন্টগুলি হারিয়ে যাওয়া ইত্যাদি জরুরী শেলটি ফেলে রাখা উচিত নয়, (পরিবর্তে কেবল সতর্কতা দেখানো উচিত) যদি না প্রদত্ত ত্রুটি কনসোল লগইনকে একেবারে অসম্ভব হিসাবে রেন্ডার করে না। কী চালানো যায়, তা চালানো উচিত।

আমি জানি যে সিস্টেমেড স্বয়ংক্রিয়ভাবে / etc / fstab থেকে * .মাউন্ট ফাইলগুলি উত্পন্ন করে এবং আমি ছোট x-systemd.device সময়সীমা (বা প্রাসঙ্গিক .মাউন্ট ফাইলগুলি নিজেই সংজ্ঞায়িত) সহ নোফাইল বিকল্পটি ব্যবহার করতে পারি। তবে এটি আমার সমস্যার সমাধান করতে পারে না, আমি সিস্টেমটিকে আরও দৃili়তর করতে চাই, প্রতিবার "প্যাচিং" fstab খুব সুবিধাজনক নয় এবং আমি নিশ্চিত নই যে আরও কতগুলি সম্ভাব্য "সমস্যা" রয়েছে যা আমার সিস্টেমকে অচল করতে পারে কেবল কারণ কিছু বিকাশকারী কোথাও ভেবেছিলেন এটি যথেষ্ট গুরুত্বপূর্ণ।

সাজানোর অনুসারে, আমি আমার মেশিনের উপর আবার নিয়ন্ত্রণ ফিরে পেতে চাই এবং বুট প্রক্রিয়াটি ক্রাশ করার জন্য কোন সমস্যাটি যথেষ্ট গুরুতর তা সিস্টেমে সিদ্ধান্ত নিতে দেয় না। এটা কি সম্ভব?


বিটিডব্লিউর আসল সমস্যা কী? আমি দুটি সম্পর্কে সচেতন - এসএসএস-এর মাধ্যমে লগইন করতে সক্ষম না হওয়া এবং সুলোগিন প্রম্পটটি কেবল জরুরী মোডে অ্যাক্সেস পাওয়ার জন্য সুডো ব্যবহারকারীদের নয়, মূলকে অনুমতি দেয়। আপনারা যে ক্ষতিগুলি ভোগ করেছেন তা কি সেগুলি কভার করে?
সোর্সজেদি

হ্যাঁ, এই দুটি পরিষেবা শুরু করা হলে সিস্টেমটি আরও অনেক বেশি অ্যাক্সেসযোগ্য হবে। সর্বোপরি সিস্টেমটিকে এমন সমস্ত কিছু শুরু করা উচিত যা পুরানো এসআইএসভি বারের মতো শুরু করা যেতে পারে (জরুরি শেল দ্বারা বেদনাদায়ক মৃত্যুর পরিবর্তে ত্রুটি লগিন ') এবং মারাত্মক ত্রুটির ক্ষেত্রে কেবল শেলটি শুরু করা উচিত।
goteguru

উত্তর:


7

এটি আক্ষরিকরূপে কেবলমাত্র ব্যর্থতাগুলিই হ'ল, এটি আপনাকে বদলাতে হবে।

সুতরাং আপনার অনুরোধের চিঠিটি উত্তর দেওয়ার জন্য তুচ্ছ হবে। একটি ড্রপ-ইন ফাইল তৈরি করুন:

# /etc/systemd/system/local-fs.target.d/nofail.conf

# Clear OnFailure= (set it to nothing)
[Unit]
OnFailure=

আমি বিশ্বাস করি যে এটি আংশিক ব্যর্থতার দৃশ্যের অনুমতি দিয়ে লিনাক্স সিজনভিট ইতিমধ্যে ভুগেছে beyond


তবে আপনি নির্দিষ্ট ব্লক ডিভাইসগুলি উপলব্ধ হওয়ার জন্য সিস্টেমড কতক্ষণ অপেক্ষা করতে হবে সে প্রশ্নটিও উল্লেখ করেছেন । সামগ্রিকভাবে fstab জেনারেটরের প্রতিস্থাপন না করে আমি এটি কনফিগার করার কোনও উপায় দেখতে পাচ্ছি না। https://www.freedesktop.org/software/systemd/man/systemd.generator.html

আপনি যদি এখানে প্রচুর পরিমাণে কম ব্যবহৃত কোড ব্যবহার করেন তবে এটি সিস্টেমের স্থিতিস্থাপকতা বাড়ানোর সম্ভাবনা কম বলে মনে হচ্ছে। আমি মনে করি নিকটতম সমাধানটি বিদ্যমান fstab জেনারেটর প্যাচ করা হবে। এটি ব্যাপকভাবে জটিল নয়, আমি সন্দেহ করি আপনি এটি থেকে দূরে সরে যেতে পারবেন / কোনও উল্লেখযোগ্য পরিবর্তন সহ্য করতে পারেন।

টেকনিক্যালি, যদি আপনার বন্টন একটি স্বয়ংসম্পূর্ণ ছিল mountallsysvinit স্ক্রিপ্ট, আপনি যে hooking চেষ্টা করে দেখতে পারেন কিন্তু যে উল্লেখযোগ্যভাবে বুট প্রক্রিয়া পরিবর্তন করতে হবে -। এটা আসলে আরো একটি কাঁটাচামচ করুন। আমি এই পদ্ধতির সুপারিশ করব না।


https://unix.stackexchange.com/a/393711/29483

আপনি যদি ইউনিট ফাইলগুলি অনুসন্ধান করেন তবে বুটটিতে ফিরে যাওয়ার খুব কয়েকটি উপায় রয়েছে emergency.target। এটি সাধারণত যখন .mountস্থানীয় ফাইল সিস্টেমের জন্য একটি ইউনিট ব্যর্থ হয়, যার ফলে local-fs.target ব্যর্থ হয়। অথবা যখন আপনার initramfs রুট ফাইল সিস্টেমটি মাউন্ট করতে ব্যর্থ হয়, যদি আপনার initramfs সিস্টেমড ব্যবহার করে।

local-fs.targetহয়েছে OnFailure=emergency.target। এবং এটি ব্যর্থ হয়ে যায় কারণ স্থানীয় ফাইল সিস্টেমগুলির জন্য ইউনিটগুলি স্থানীয়-fs.target এর প্রয়োজনীয় তালিকায় স্বয়ংক্রিয়ভাবে যুক্ত হয় (তারা না থাকলে DefaultDependencies=no)।

$ systemctl show --property Requires local-fs.target
Requires=-.mount home.mount boot.mount boot-efi.mount

2
আমি মনে করি [Unit]\nOnFailure= আমার nofail.conf এ .োকানো উচিত । /Etc/systemd/system.conf (জেনেরিক ডিফল্টটাইমআউটস্টার্টসেক বিকল্পের মাধ্যমে) অপেক্ষার সময়টি কনফিগার করা সম্ভব বলে মনে হচ্ছে। আমার সিস্টেমগুলি সাধারণত পর্যাপ্ত দ্রুত হয়, 90 এর দশকে যাইহোক ওভারকিল বলে মনে হয়। এই সমাধানটি আশাব্যঞ্জক বলে মনে হচ্ছে।
goteguru

আমার ক্ষেত্রে আমি সেট OnFailure=মধ্যে /lib/systemd/system/local-fs.targetপরিবর্তে /etc/systemd(ডেস্কটপ AWS উবুন্টু 16.04)
ThiagoAlves

@ থিয়াগোআলভগুলি আপনার এমনটি করা উচিত নয়, এটি সিস্টেম আপগ্রেডগুলিতে ওভাররাইট করা হবে। উত্তরের নির্দেশাবলী অনুসরণ করুন, বা স্পষ্টতার জন্য জিজ্ঞাসা করুন :-)।
সোর্সজেডি

@ সোর্সজেদি আমি উত্তরটি চেষ্টা করেছি কিন্তু এটি আমার পক্ষে কার্যকর হয়নি
থিয়াগোআলভস

1
@ থিয়াগোআলভস আপনার মতামতের জন্য ধন্যবাদ আমি উত্তরটি কম অস্পষ্ট করে তুলেছি, সুতরাং সমস্যাটি ছিল কি না সে সম্পর্কে আমরা পরিষ্কার হতে পারি। যেমন, আপনি [Unit]আগে অন্তর্ভুক্ত করার বিষয়ে নিশ্চিত হন কিনা তা অবাক করি OnFailure=
সোর্সজেদি

0

প্রবেশের ক্ষেত্রে noautoমাউন্ট অপশন যুক্ত করে বুট ক্রিয়াকলাপের অপ্রয়োজনীয় কোনও ফাইল সিস্টেমের স্বয়ংক্রিয় মাউন্টিং বন্ধ করুন /etc/fstab:

/dev/sdxy /u01 nfs defaults 0 0

প্রতি:

/dev/sdyx /u01 nfs noauto 0 0

এবং তারপরে একটি লাইন ব্যবহার করে বুটের পরে ফাইল সিস্টেমটি মাউন্ট করুন /etc/rc.local:

mount /u01

এই উদাহরণটি এনএফএস ব্যবহার করে তবে এটি ফাইল সার্ভার থেকে আমদানীকৃত LUNs এর ক্ষেত্রেও প্রযোজ্য।


1
হ্যাঁ, আমি নোয়াটো জানি, তবে আমি যদি প্রতিবার fstab পরিবর্তন করি তবে নোফাইল আরও ভাল পছন্দ হতে পারে। যাইহোক থেক্স।
goteguru

0

এটি চেষ্টা করুন?

systemctl mask emergency.service
systemctl mask emergency.target

4
আপনি কি এই চেষ্টা করেছেন? বুট চলাকালীন জরুরী টার্গেটটি মুখোশযুক্ত অবস্থায় সিস্টেমড কোনও ত্রুটির মুখোমুখি হলে কী ঘটে?
স্টিফেন কিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.