আমি কয়েক সপ্তাহ ধরে যে সমস্যার সাথে লড়াই করে যাচ্ছি তা অবশেষে শেষ করতে পেরেছি। আমি দূরবর্তী অবস্থান থেকে কমান্ড চালাতে "অনুমোদিত কীগুলি" সহ এসএসএইচ ব্যবহার করি। কিছুক্ষণ ঠিক আছে যখন আমি কিছুক্ষণ লুপে করি except লুপটি ssh কমান্ডের মাধ্যমে কোনও পুনরাবৃত্তি সম্পন্ন করার পরে সমাপ্ত হয়।
দীর্ঘদিন ধরে আমি ভেবেছিলাম এটি একরকম ক্ষুদ্র অদ্ভুততা ছিল তবে আমি এখন আবিষ্কার করেছি যে বাস্তবে বাশ একইরকম আচরণ করে।
সমস্যাটি পুনরুত্পাদন করার জন্য একটি ছোট্ট নমুনা প্রোগ্রাম। এটি বৃহত্তর বাস্তবায়ন থেকে পাতিত হয় যা স্ন্যাপশট নেয় এবং একটি ক্লাস্টারের নোডের মধ্যে প্রতিলিপি করে।
#!/bin/bash
set -x
IDTAG=".*zone"
MARKER="mark-$(date +%Y.%m.%d.%H.%M.%S)"
REMOTE_HOST=sol10-target
ZFSPARENT=rpool
ssh $REMOTE_HOST zfs list -t filesystem -rHo name,mounted $ZFSPARENT | grep "/$IDTAG " > /tmp/actionlist
#for RMT_FILESYSTEM in $(cat /tmp/actionlist)
cat /tmp/actionlist | while read RMT_FILESYSTEM ISMOUNTED
do
echo ${RMT_FILESYSTEM}@${MARKER}
[ "$ISMOUNTED" = "yes" ] && ssh $REMOTE_HOST zfs snapshot -r ${RMT_FILESYSTEM}@${MARKER}
echo Remote Command Return Code: $?
done
(নোট করুন জিএফএস তালিকা "-H" বিকল্পের আচরণের সংজ্ঞা অনুযায়ী গ্রেপ অনুসন্ধানের এক্সপ্রেশনটিতে একটি ট্যাব অক্ষর রয়েছে))
আমার নমুনাটিতে মূলটির জন্য কিছু জেডএফএস ফাইল সিস্টেম রয়েছে যেখানে সমস্ত "জোনগুলি" এর সাথে ডেটাসেটের মতো একই নামের ফাইল রয়েছে
পল
/ জোন / অ্যাপ 1 জোন পোল / জোন / গ্রুপ 2 / অ্যাপ 2 জোন one
প্রভৃতি
উপরের লুপটি নির্বাচিত প্রতিটি ডেটাসেটের জন্য একটি স্ন্যাপশট তৈরি করা উচিত, তবে স্থিরভাবে এটি কেবল প্রথমটিতে কাজ করে এবং তারপরে প্রস্থান করে।
প্রোগ্রামটি সঠিক সংখ্যক ডেটাসেটের সন্ধান করে স্ক্রিপ্টটি উপস্থিত থাকার পরে "/ tmp / actionlist" ফাইলটি পরীক্ষা করে সহজেই নিশ্চিত হওয়া যায়।
Ssh কমান্ডটি যদি প্রতিস্থাপন করা হয়, উদাহরণস্বরূপ, একটি ইকো কমান্ড, তারপরে লুপটি সমস্ত ইনপুট লাইনের মধ্য দিয়ে পুনরুক্ত হয়। অথবা আমার প্রিয় - আপত্তিজনক কমান্ডের "প্রতিধ্বনি" প্রিপেন্ড করুন।
যদি আমি স্থিরভাবে লুপের জন্য ব্যবহার করি তবে এটিও কাজ করে, তবে ডেটাসেটের তালিকার সম্ভাব্য আকারের কারণে এটি সর্বাধিক প্রসারিত কমান্ড লাইনের দৈর্ঘ্যের সমস্যা তৈরি করতে পারে।
আমি এখন 99.999% নিশ্চিত যে এগুলির মধ্যে ssh কমান্ডযুক্ত কেবলমাত্র লুপগুলি আমাকে সমস্যা দেয়!
মনে রাখবেন যে ssh কমান্ডটি চালিত পুনরুক্তিটি সম্পূর্ণ হয়! এটি এমনভাবে লুপটি হস্তান্তরিত হওয়ার সময় হঠাৎ হারিয়ে যাওয়া ডেটাগুলিতে চলে যায় ... যদি প্রথম কয়েকটি ইনপুট লাইনগুলি কোনও ssh কমান্ড না সম্পাদন করে, তবে লুপটি যতক্ষণ না এটি আসলে এসএসএইচ কমান্ড চালায় ততক্ষণ চলে।
আমার ল্যাপটপে যেখানে আমি এটি পরীক্ষা করছি সেখানে আমার কাছে প্রায় দুটি বা তিনটি নমুনা ডেটাসেটের সাথে দুটি সোলারিস 10 ভিএম রয়েছে তবে বৃহত্তর স্পার্ক সিস্টেমে একই ঘটছে যেখানে এটি লাইভ হওয়ার অর্থ, এবং অনেকগুলি ডেটাসেট রয়েছে।
actionlist
।/dev/null