শেল স্ক্রিপ্ট: সমান্তরালে এন কমান্ডের একটি ব্যাচ চালান, সমস্ত শেষ হওয়ার জন্য অপেক্ষা করুন, পরবর্তী এন চালান


9

কার্য: 3-5 কমান্ড (সমান্তরাল / পটভূমিতে) সহ ব্লকগুলি চালান। উদাহরণ ব্লক:

dd if=/dev/urandom of=/mnt/1/x bs=1024 count=1024000000 &
dd if=/dev/urandom of=/mnt/2/x bs=1024 count=1024000000 &
dd if=/dev/urandom of=/mnt/3/x bs=1024 count=1024000000 &

এটি শেষ হয়ে গেলে, পরবর্তী ব্লকটি চালানো উচিত। আমার ধারণা, লক ফাইলের মাধ্যমে এটি করা যেতে পারে:

task1.sh:

real_task1 real_param1 ; rm /var/lock/myscript/task1.lock

task2.sh:

real_task2 real_param1 ; rm /var/lock/myscript/task2.lock

...

taskgen.sh:

# loop
 # while directory isn't empty - wait...
 gen_tasks.pl # build task files from some queue
 for i in 1 2 3; do touch /var/lock/myscript/task$i.lock ; done
 ./task1.sh &
 ./task2.sh &
 ./task3.sh &
 # if task1.sh doesn't exits then exit, else loop waits for files to be deleted

ডিরেক্টরিটি ফাঁকা আছে কিনা তা পরীক্ষা করার জন্য বেশ কয়েকটি পদ্ধতি এখানে পাওয়া যাবে , কোনটি ব্যবহার করবেন তা নিশ্চিত হন না;

প্রশ্ন : এর বাস্তবায়নের আরও ভাল কোন উপায়?

PS সম্ভাব্য স্থিতি প্রতিবেদনের পদ্ধতি:

 command && report_good_state.sh taskid ;  report_state_done.sh taskid; rm /var/lock/myscript/taskN.lock

বন্ধুরা, কী বলবেন তা জানেন না: সমস্ত উত্তর সঠিক, ধন্যবাদ!
কাগলি-সান

উত্তর:


8

এটি ঠিক gnu সমান্তরাল জন্য ডিজাইন করা হয়েছে, তাই আমি আপনাকে দৃ strongly়ভাবে এটি ব্যবহার করার পরামর্শ দিচ্ছি। বিশেষত, এটি একটি সেমফোর হিসাবে চালানো দেখুন :

for i in {1..4}
do
  echo running $i
  sem -j3 df dd if=/dev/urandom of=/mnt/$i/x bs=1024 count=1024000000 ";" echo done
done
# sem --wait waits until all jobs are done.
sem --wait


5

জিএনইউ সমান্তরাল জাতীয় কিছু ব্যবহার না করার আপনার কি কোনও বিশেষ কারণ আছে ? আপনার যদি অবশ্যই বাশ ব্যবহার করতে হয় তবে এই ব্লগ পোস্টে বর্ণিত মত পদ্ধতিগুলি বিবেচনা করুন (অপেক্ষা করুন এবং নামযুক্ত পাইপগুলি এখানে সহায়ক)


3

"অপেক্ষা" সমস্ত পটভূমি কাজ শেষ হওয়ার জন্য অপেক্ষা করে। নমুনা:

30 30 শো এবং 40 ঘুমাও 120 এবং অপেক্ষা করুন

সমস্ত কমান্ড সমাপ্ত না হওয়া পর্যন্ত এটি অপেক্ষা করে, উদাহরণস্বরূপ কমপক্ষে 120 সেকেন্ড।

আশাকরি এটা সাহায্য করবে.


0

উপরের ফিল হলেনব্যাকের বর্ণনা অনুসারে আমরা জিএনইউ সেম ইউটিলিটিটি ব্যবহার করার চেষ্টা করেছি , তবে এটি দেখতে পেয়েছে যে খুব ভারী ওজন (300+ উদাহরণ মেশিনকে পঙ্গু করে দিয়েছে)। হালকা ওজন গণনা সেমফোর বাস্তবায়নের জন্য আমি অনুরূপ সরঞ্জামগুলির আশেপাশে চেয়েছিলাম তবে উপযুক্ত কিছু পাইনি।

তাই আমি নিজেও পালকে ব্যবহার করে একটি বাস্তবায়ন করেছি, একে বলা হয় সেমফোরিক

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