সিস্টেমড: অন্য ইউনিট সত্যিই শুরু হওয়ার পরে একটি ইউনিট শুরু করুন


20

আমার বিশেষ ক্ষেত্রে আমি সম্পূর্ণরূপে শুরু remote-fsহওয়ার পরে ইউনিট শুরু করতে চাই glusterfs

আমার সিস্টেমযুক্ত ফাইলগুলি:

glusterfs লক্ষ্য:

node04:/usr/lib/systemd/system # cat glusterfsd.service 
[Unit]
Description=GlusterFS brick processes (stopping only)
After=network.target glusterd.service

[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes
ExecStop=/bin/sh -c "/bin/killall --wait glusterfsd || /bin/true"
ExecReload=/bin/sh -c "/bin/killall -HUP glusterfsd || /bin/true"

[Install]
WantedBy=multi-user.target

remote-fs লক্ষ্য:

node04:/usr/lib/systemd/system # cat remote-fs.target 
[Unit]
Description=Remote File Systems
Documentation=man:systemd.special(7)
Requires=glusterfsd.service
After=glusterfsd.service remote-fs-pre.target
DefaultDependencies=no
Conflicts=shutdown.target

[Install]
WantedBy=multi-user.target

ঠিক আছে, সমস্ত গ্লাস্টার ডেমনগুলি সফলভাবে শুরু হয় এবং আমি এনএফএসের মাধ্যমে গ্লাস্টার ফাইল সিস্টেমটি মাউন্ট করতে চাই, তবে গ্লাস্টারের এনএফএস শেয়ারটি glusterfs.serviceশুরু হওয়ার সাথে সাথেই প্রস্তুত হয় না , তবে কয়েক সেকেন্ড পরে, তাই সাধারণত remote-fsএটি সম্পর্কিত Requiresএবং Afterনির্দেশাবলীর পক্ষে এটি মাউন্ট করতে অক্ষম ।

লগটি দেখা যাক:

Apr 14 16:16:22 node04 systemd[1]: Started GlusterFS, a clustered file-system server.
Apr 14 16:16:22 node04 systemd[1]: Starting GlusterFS brick processes (stopping only)...
Apr 14 16:16:22 node04 systemd[1]: Starting Network is Online.
Apr 14 16:16:22 node04 systemd[1]: Reached target Network is Online.
Apr 14 16:16:22 node04 systemd[1]: Mounting /stor...

এখানে সবকিছু ঠিক আছে, গ্লাস্টারফ শুরু হওয়ার পরে রিমোট ফাইল সিস্টেম (/ স্টোর) মাউন্ট হবে বলে মনে হচ্ছে, যেমন এটি ইউনিট ফাইল অনুসারে বোঝানো হয়েছিল ... তবে পরবর্তী লাইনগুলি হ'ল:

//...skipped.....
Apr 14 16:16:22 node04 systemd[1]: Started GlusterFS brick processes (stopping only).

কি? গ্লাস্টারএফএস এই মুহুর্তের জন্য প্রস্তুত! এবং তারপরে আমরা দেখতে পেলাম:

//...skipped.....
Apr 14 16:16:23 node04 mount[2960]: mount.nfs: mounting node04:/stor failed, reason given by server: No such file or directory
Apr 14 16:16:23 node04 systemd[1]: stor.mount mount process exited, code=exited status=32
Apr 14 16:16:23 node04 systemd[1]: Failed to mount /stor.
Apr 14 16:16:23 node04 systemd[1]: Dependency failed for Remote File Systems.
Apr 14 16:16:23 node04 systemd[1]: Unit stor.mount entered failed state.

মাউন্ট ব্যর্থ হয়েছে কারণ সিস্টেমড যখন স্টোরেজ মাউন্ট করার চেষ্টা করেছিল তখন এনএফএস সার্ভার প্রস্তুত ছিল না।

সিস্টেমযুক্ত বুট প্রক্রিয়াটির অ-নিষেধাত্মক প্রকৃতির কারণে, কখনও কখনও (10 বুটের মধ্যে প্রায় 1) এই ফাইল সিস্টেমটি বুটে মাউন্ট করা সফল হয়।

যদি অনবুট মাউন্টটি ব্যর্থ হয় তবে আমি সার্ভারে লগইন করতে পারি এবং ম্যানুয়ালি / স্টোর ডিরেক্টরিটি মাউন্ট করতে পারি, সুতরাং গ্লাস্টারের এনএফএস পরিষেবাটি ঠিকঠাকভাবে কাজ করছে বলে মনে হচ্ছে।

সুতরাং কিভাবে remote-fsপরে শুরু করবেন glusterfsd, Started GlusterFS brick processesলগ পরে লাইন প্রদর্শিত পরে ?

remote-fsএকেবারে শেষ লক্ষ্যগুলির মধ্যে একটি বলে মনে হচ্ছে, সুতরাং আমি অন্য "workaround" টার্গেটের পরে এটি শুরু করতে পারি না যা বাস্তবে প্রয়োজন হয় না remote-fs


5
আপনি কি ExecStartPre=<command>এর ইউনিট বিভাগে একটি সম্পত্তি যুক্ত করতে পারেন glusterfsd.serviceএমন একটি আদেশ কার্যকর করে যা গ্লাস্টারফস প্রস্তুত না হওয়া অবধি ব্লক হয়ে যাবে? এটি glusterfsd.serviceসাফল্যের ইঙ্গিত এবং সক্রিয়করণ থেকে আটকাতে পারে remotefs.target
বেন ক্যাম্পবেল

2
আমি আপনার glusterfsd.serviceইউনিট ফাইল দ্বারা সত্যিই বিভ্রান্ত । এটি আসলে কোনও পরিষেবা শুরু করার মতো বলে মনে হচ্ছে না এবং বাস্তবে কোনও প্রক্রিয়া মারা যায়glusterfsd । আপনার কাছে কি অন্য কোনও গ্লাস্টার-সংক্রান্ত ইউনিট ফাইল রয়েছে?
গ্রেগল

আপনি কি stor.mountইউনিট দেখাতে পারেন ?
ব্রায়ান রেডবার্ড

উত্তর:


3

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

systemd-analyze plot > test.svg

এই চক্রান্ত আপনাকে সর্বশেষ বুটের সময়সীমার পরিসংখ্যান সরবরাহ করবে, যা আপনাকে সমস্যার আরও স্পষ্ট দৃষ্টিভঙ্গি প্রদান করবে।

আমি আমার এনএফএসের মাউন্টিং সমস্যাটিতে mountকমান্ড যুক্ত করে সমাধান করেছি /etc/rc.local। তবে আমি নিশ্চিত নই, এটি কী গ্লাস্টারড ইন্টিগ্রেশন নিয়ে কাজ করবে, দ্রুত সমাধানের জন্য চেষ্টা করার মতো for সিস্টেমে চালিত আরসি.লোকাল করার জন্য আপনার নিম্নলিখিত শর্তটি পূরণ করতে হবে:

# grep Condition /usr/lib/systemd/system/rc-local.service
ConditionFileIsExecutable=/etc/rc.d/rc.local

1

যেমন ইতিমধ্যে অন্যরা পরামর্শ দিয়েছে; আমি নিশ্চিত না যে এটি আসলে 'glusterfsd' এর উপর নির্ভরশীলতা, অন্য কোনও কারণে সাধারণ বিলম্বের পরিবর্তে, উদাহরণস্বরূপ একটি ডিএনএস অনুসন্ধান যা 'নোড 4' সমাধান করতে সক্ষম হবে এবং সফলভাবে এনএফএস ভাগটি মাউন্ট করতে সক্ষম হবে।

আমরা এই বিলম্বটি শেষ করেছি কারণ আমাদের বেশিরভাগ সেটআপগুলি স্থানীয় বৈধতা রোধকারী ব্যবহার করে, যা ডিএনএসের উপর নির্ভরশীল অন্যান্য পরিষেবাগুলি সফলভাবে শুরু করতে পারে তার আগে উপলব্ধ হওয়া দরকার।

এর সমাধানটি ছিল একটি 'এক্সিকিস্টার্টপ্রে' স্ক্রিপ্ট যা মূলত নির্দিষ্ট নির্ভরতার প্রাপ্যতার জন্য বারবার এবং বেশি সময় ধরে পরীক্ষা করে, যতক্ষণ না এটি সফল হয় (প্রস্থান 0) বা চেষ্টা করে বেরিয়ে আসার আগে (প্রস্থান 1)।

আপনি যদি পারেন তবে মূল সিস্টেমড লাইব ডিরেক্টরিটির বাইরে কাস্টমাইজ করেছেন তা নিশ্চিত করুন। প্যাকেজ ফাইলগুলি পরিবর্তন করার অর্থ তারা সম্ভবত পরবর্তী আপডেটে ওভাররাইট করা হবে।



0

কিছু পোলিং সাহায্য করতে পারে। এটি সিস্টেমড থেকে স্বতন্ত্র। উদাহরণস্বরূপ mysql -e ';', মাইএসকিএল দিয়ে দরকারী কিছু করার আগে আমি একটি লুপ ব্যবহার করি ।

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