উত্তর:
আপনি কিছুক্ষণ লুপ ব্যবহার করবেন না।
parallel "sortstuff.sh -a {} > sortedstuff-{}" <live_hosts
মনে রাখবেন যে আপনার live_hosts
(উদাহরণস্বরূপ /some/dir/file
) রাস্তাগুলি প্রসারিত হওয়ার সাথে সাথে sortstuff.sh -a /some/dir/file > sortedstuff-/some/dir/file
(ফলস্বরূপ no such file or directory
) থাকলে এটি কাজ করবে না ; এই ক্ষেত্রে ব্যবহার {//}
এবং {/}
( বিশদ জন্য gnu-parallel
ম্যানুয়াল দেখুন):
parallel "sortstuff.sh -a {} > {//}/sortedstuff-{/}" <live_hosts
>
সঙ্গে | tee
যেমন প্রথম কমান্ড হয়ে parallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
একটি পুরাতন স্কুল হিসাবে "একটি কাজ করুন এবং এটি ভালভাবে করুন" ইউনিক্স ছেলে, আমি স্ট্রিং প্রতিস্থাপনের জিনিসগুলি একটি মোড়কের স্ক্রিপ্টে রাখতাম:
#!/bin/sh
sortstuff.sh -a "$1" > sortedstuff-"$1"
আপনি যদি এটি কল করেন wrapper.sh
, কল করার parallel
আদেশটি হ'ল:
parallel wrapper.sh < live_hosts
মনে রাখবেন যে আপনার cat
এই ধরণের জিনিসটির প্রয়োজন নেই, যা একটি বাহ্যিক প্রোগ্রামের অনুরোধ সংরক্ষণ করে।
আপনার দরকার নেই parallel
, যেহেতু লুপের বডিটি পূর্ববর্তী পুনরাবৃত্তির উপর নির্ভর করে না। প্রতিটি হোস্টের জন্য কেবল একটি নতুন পটভূমি প্রক্রিয়া শুরু করুন।
while read host; do
sortstuff.sh -a "$host" > sortedstuff-"$host" &
done < live_hosts
wait # Optional, to block until the background tasks are done
parallel
কিছু বিষয় পরিচালনা করা সহজ করে তোলে যদিও; আপনি আরও সহজে সমান্তরালে চলমান কাজের সংখ্যা সীমাবদ্ধ করতে পারেন।
wc -l live_hosts
ডিস্ক স্পিন্ডল বা সিপিইউ কোরের সংখ্যার চেয়ে বেশি হয় - টাস্কটি আই / ও বা সিপিইউযুক্ত কিনা তার উপর নির্ভর করে - আপনি এর মতো সমাধানের সাথে সমান্তরালতা থেকে যে পরিমাণ সুবিধা পাবেন তা আপনি খেয়ে যাচ্ছেন। parallel
কাজের সংখ্যা সীমাবদ্ধ করার ক্ষমতা কেবল দুর্দান্ত নয়, এটি নিকট-অপরিহার্য, যদি প্রক্রিয়াজাতকরণের গতি আপনার লক্ষ্য হয়।
tee
সাথে ব্যবহার করা কি সম্ভব ? সুতরাং আমি আউটপুট এটি দেখতে হিসাবে দেখতে পারেন।parallel
sortedstuff