লুপ থামার সময় এসএসএইচের কারণ হয়


30

আমি কয়েক সপ্তাহ ধরে যে সমস্যার সাথে লড়াই করে যাচ্ছি তা অবশেষে শেষ করতে পেরেছি। আমি দূরবর্তী অবস্থান থেকে কমান্ড চালাতে "অনুমোদিত কীগুলি" সহ এসএসএইচ ব্যবহার করি। কিছুক্ষণ ঠিক আছে যখন আমি কিছুক্ষণ লুপে করি 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 ভিএম রয়েছে তবে বৃহত্তর স্পার্ক সিস্টেমে একই ঘটছে যেখানে এটি লাইভ হওয়ার অর্থ, এবং অনেকগুলি ডেটাসেট রয়েছে।


7
SSH- র স্ট্যান্ডার্ড ইনপুট থেকে পড়া যেতে পারে, আপ আপনার খাওয়া actionlist/dev/null
Ssh

আমি চেষ্টা করব। আমি যুক্ত করতে চাই যে একটি মোড়কে ssh লাগানো কোনও উপকার করে না ....
জোহান

আপনি সঠিক. আমি কীভাবে তা দেখতে পেলাম না !?
জোহান

@ ব্যাচইএক্স আমি মনে করি আপনার মন্তব্য উত্তর হিসাবে যোগ্যতা অর্জন করেছে।
একটি সিভিএন

আমি সম্মত হয়েছি আমি উত্তরটি "গ্রহণ" করতে চাই তাই যদি @ ব্যাচএক্স এটি পোস্ট করতে পারে তবে আমি তা করব।
জোহান

উত্তর:


43

এসএসএইচ স্ট্যান্ডার্ড ইনপুট থেকে আপনার অ্যাকশনলিস্টটি খাচ্ছে reading Ssh এর স্ট্যান্ডার্ড ইনপুটটিকে / dev / নাল এ পুনঃনির্দেশ করার চেষ্টা করুন:

ssh $REMOTE_HOST zfs snapshot -r ${RMT_FILESYSTEM}@${MARKER} </dev/null

একটি সাধারণ নিয়ম হিসাবে, যখন কমান্ডগুলি চালিত হয় যা while readস্টাইল লুপের অধীনে স্ট্যান্ডার্ড ইনপুটটিতে হস্তক্ষেপ করতে পারে তখন আমি পুরো লুপের বডিটি বন্ধনীগুলিতে আবৃত করতে পছন্দ করি:

cat /tmp/uuoc | 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: $?
} < /dev/null; done

3
প্রথমত কোঁকড়া ধনুর্বন্ধনী ব্যবহারের জন্য ... যা স্ক্রিপ্টিংয়ের 20 বছরে আমার কখনও কখনও দেখা হয়নি (যা কমপক্ষে আমি মনে করতে পারি না)) এবং ইউউক অনুমানের জন্য ডাবল দুর্দান্ত। এফডাব্লুআইডাব্লু (এবং আমার নিজের প্রতিরক্ষার সাথে) আমি মাঝে মাঝে একটি ব্যতিক্রম করি এবং পাঠযোগ্যতার জন্য অতিরিক্ত বিড়ালের বিবৃতি যুক্ত করি! আমি এই ফোরামটি ভালবাসি কারণ হঠাৎ আবার নতুন জিনিস শিখছি! বিশেষত আমি এই মামলার মত লাইনের শুরুতে পুনর্নির্দেশগুলি যুক্ত করতে চাই তবে ফোরামগুলিতে বিষয়টি বিভ্রান্ত বলে মনে হচ্ছে, যার ফলে আমাকে কম দরকারী প্রতিক্রিয়া পাওয়া যাবে!
জোহান

আমি {...} এবং (...) কেএসএইচ ম্যান পৃষ্ঠাতে the ... between এর মধ্যে পার্থক্যটি সন্ধান করার চেষ্টা করছি যা কেবলমাত্র একটি কমান্ড লাইনের সূচনাতেই স্বীকৃত বিশেষ কীওয়ার্ড। তবে আরও একটি পার্থক্য আছে ... ( </tmp/file [ -z "$SOMEVAR" ] && awk '{print "X", $0}' )কোঁকড়া ধনুর্বন্ধনী সঙ্গে একই পৃথক। আমি উত্পাদিত আউটপুটটির দিক থেকে বোঝাতে চাইছি না, বন্ধ হওয়া কোঁকড়ানো বন্ধনীটি একটি নতুন লাইনে থাকা উচিত ...
জোহান

5
এছাড়াও, ওপেনএসএইচ-এর এসএসএস--nবিকল্প রয়েছে যা এটিকে (কার্যকরীভাবে) / ডিভ / নাল থেকে স্ট্যান্ডিন পুনরায় খুলতে সক্ষম করে।
ক্রিস জনসেন

sudoলুপের ভিতরে কমান্ডটি ব্যবহার করার জন্য কোনও কাজের ক্ষেত্র ?
বনহ

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