ফোল্ডারে বাশ স্ক্রিপ্টগুলি একই সাথে চালান


10

ধরা যাক আমার .shএকটি ফোল্ডারে ( my_folder) এর পাঁচটি বাশ ( ) স্ক্রিপ্ট রয়েছে এবং সেগুলির নাম নীচে দেওয়া হয়েছে:

script_1.sh
script_2.sh
script_3.sh
script_4.sh
script_5.sh

আমি কীভাবে ষষ্ঠ বাশ লিপি বা কেবল একটি লাইনার লিখতে পারি যা এই সমস্ত স্ক্রিপ্টগুলি একসাথে চালানো শুরু করবে?

আমার এক সাথে অন্যের পরে নয় একই সাথে সমস্ত এক সাথে চলতে শুরু করতে আমার পাঁচটি স্ক্রিপ্ট দরকার।


1
সম্পর্কিত: একটি কমান্ড সহ
.sh

উত্তর:


12

GNU parallelএই ধরণের জিনিস জন্য নিখুঁত। এর সাথে sudo apt install parallelএবং তারপরে ইনস্টল করুন :

parallel -j0 ::: my_folder/*sh

-jনিয়ন্ত্রণগুলি কত প্রসেস টি সমান্তরাল চালানোর জন্য, এবং -j0মানে হলো "তাদের সব"। -j20পরিবর্তে ব্যাচগুলিতে স্ক্রিপ্টগুলি চালানোর জন্য এটি অন্য মানতে সেট করুন (যেমন )।


1
নোট: প্যাকেজ parallelথেকে কমান্ডও আছে moreutils। উদাহরণস্বরূপ ব্যবহার: parallel -j 20 -- my_folder/*.sh(জিএনইউ এর বিপরীতে parallel, -j0স্ক্রিপ্টগুলি একবারে চালানো হবে)।
jfs

1
@jfs ভাল পয়েন্ট। তবে নোট করুন যে sudo apt install parallelফাইলটি /usr/bin/parallelGNU সমান্তরাল থেকে একটির সাথে প্রতিস্থাপন করবে । সুতরাং যতক্ষণ আপনি এটি ইনস্টল করবেন, আমার উত্তর হিসাবে যেমনটি দেখা যায়, এটি প্রত্যাশার মতো কাজ করা উচিত।
টেরডন

হ্যাঁ, parallelজিএনইউ সমান্তরাল পরামর্শ দেওয়ার জন্য আমার উত্তর লেখার সময় আমি ম্যানুয়ালটি থেকে অসফল কমান্ড চেষ্টা করার সময় আমি এটি হার্ড উপায়টি খুঁজে পেয়েছি ।
jfs

9

সমস্ত স্ক্রিপ্ট একই সময়ে চালাতে (সমান্তরালে) ব্যবহার করুন:

script_1.sh &
script_2.sh &
script_3.sh &
script_4.sh &
script_5.sh &

একের পর এক চালানোর জন্য (ধারাবাহিকভাবে) ব্যবহার করুন:

script_1.sh &&
script_2.sh &&
script_3.sh &&
script_4.sh &&
script_5.sh

মন্তব্য জন্য বর্ধন

আপনার যদি 200 টি স্ক্রিপ্ট থাকে তবে আপনি একই সময়ে চালাতে চান (যা মেশিন বিটিডব্লিউকে ডুগতে পারে) এই স্ক্রিপ্টটি ব্যবহার করুন:

#!/bin/bash
for Script in my_folder/*.sh ; do
    echo bash "$Script" &
done

কমান্ডটি দিয়ে এক্সিকিউটেবলের জন্য স্ক্রিপ্টের বৈশিষ্ট্যগুলি সেট করুন:

chmod a+x /path/to/script.sh

আপনি যখন প্রথমবার স্ক্রিপ্টটি চালাবেন এটি কেবল এটি সম্পাদন করবে এমন 200 স্ক্রিপ্টগুলির নাম প্রতিধ্বনিত করবে। আপনি যখন খুশি হন তখন সঠিক নামগুলি স্ক্রিপ্টটি সম্পাদনা করে এই লাইনটি পরিবর্তন করা হচ্ছে:

    echo bash "$Script" &

প্রতি:

    bash "$Script" &

এখানে উত্তর হিসাবে আপনি অন্যের কাছ থেকে ব্যাশ স্ক্রিপ্ট কল করতে পারেন এমন তিনটি উপায় রয়েছে:

  1. অন্যান্য স্ক্রিপ্টকে এক্সিকিউটেবল করে তুলুন, #!/bin/bashশীর্ষে লাইনটি যুক্ত করুন এবং ফাইলটি $PATHপরিবেশের পরিবর্তনশীলের দিকে যাওয়ার পথটি যুক্ত করুন । তারপরে আপনি এটিকে একটি সাধারণ আদেশ হিসাবে কল করতে পারেন;

  2. অথবা এটা উৎস আদেশের সঙ্গে যোগাযোগ করুন ভালো (ওরফে হয়।): source /path/to/script;

  3. অথবা এটা চালানো ব্যাশ কমান্ড প্রয়োগ করুন: /bin/bash /path/to/script;

ওপি-র ক্ষেত্রে 200 এর মধ্যে এক বা একাধিক স্ক্রিপ্ট #!/bin/bashফাইলটিতে শেবাং প্রথম লাইন ধারণ করে না । যেমন বিকল্প 3 ব্যবহার করা ছিল।


একই সাথে 200 স্ক্রিপ্ট চলমান

তারা "একই সাথে চলছে" কিনা তা নিয়ে একটি মন্তব্য উত্থাপিত হয়েছে। একটি সাধারণ 8 সিপিইউ সিস্টেমে একই সাথে 25 টি স্ক্রিপ্ট একটি সিপিইউ ভাগ করে নেবে তবে সময় স্লাইস (মিলি সেকেন্ডে পরিমাপ করা) শেষ না হওয়া অবধি কেবলমাত্র একটি স্ক্রিপ্ট একবারে কার্যকর হবে। তারপরে পরবর্তী কাজটি মিলিসেকেন্ডগুলির তার ন্যায্য অংশ, তারপরের পরবর্তী কাজ ইত্যাদি ইত্যাদি গ্রহণ করবে etc.

আলগা শর্তে আমরা বলতে পারি 200 টি চাকরি "একযোগে" চলছে তবে 8 সিপিইউগুলিতে "একসাথে" নয় যা প্রতি সিপিইউতে 25 টি কাজের সমান:

থ্রেড state.png

লিনাক্স কার্নেল শিডিয়ুলার থেকে নীচে চিত্র এবং মন্তব্যগুলি

সময় স্লাইস.পিএনজি


আপনাকে ধন্যবাদ .. বিষয়টি হ'ল আমার আসল ক্ষেত্রে আমার কাছে চালানোর জন্য 200 এরও বেশি স্ক্রিপ্ট রয়েছে। সুতরাং আমি কি তাদের কোনও উপায় একটি একক কমান্ড দিয়ে চালাতে পারি (অর্থাত্ তাদের ফাইলের নাম না লিখে)?
AAAAA

@aaaa আমি 200 টি স্ক্রিপ্টের জন্য উত্তরটি পরিবর্তন করেছি।
WinEunuuchs2 ইউনিক্স

ধন্যবাদ। এটি কাজ করে .. আপনার শেষ লাইনে আমাকে কেবল যুক্ত করতে হয়েছিল 'বাশ'। অন্যথায় আমি 'অনুমতি প্রত্যাখ্যান' পেয়েছি।
AAAAA

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

প্রতিক্রিয়াটির জন্য ধন্যবাদ @aaaaa। আমি bashস্ক্রিপ্ট কল করার উপসর্গ অন্তর্ভুক্ত উত্তর আপডেট করেছি ।
WinEunuuchs2 ইউনিক্স

3

এই জন্য একটি সরঞ্জাম আছে, পড়ুন man run-parts

উদাহরণস্বরূপ, আমি করি:

 run-parts ${visorhome}/pbackup.d/

আমার পাম পাইলট ব্যাকআপ স্ক্রিপ্টে। ${visorhome}/pbackup.d/:

01PopulateJpilot  02Extract_Pedometer  03URLs  04google  05Books  06Weight  07Sec  08Bkgm 50hardlinks

1
@ এলিয়াহ-কাগন "একই সাথে 200 এরও বেশি স্ক্রিপ্ট" "চালানো বুদ্ধিমান বলে মনে হচ্ছে। কোনও সিস্টেমকে চাপ দেওয়ার পক্ষে এটি ভাল উপায় হতে পারে
ওয়ালটিনেটর

ভাল যুক্তি. আমি মনে করি আপনি এখনও উল্লেখ করতে চাইতে পারেন run-partsযা ওপি অনুরোধের সাথে সাথে একবারের পরিবর্তে ক্রমানুসারে স্ক্রিপ্টগুলি সম্পাদন করে। যদিও আপনি ঠিক বলেছেন, একবারে 200 স্ক্রিপ্ট চালানো 5 রান করার সমান পারফর্ম করার সম্ভাবনা নেই - এবং এগুলি একবারে চালানো কোনও সমস্যা সৃষ্টি না করলেও এটি অপ্রয়োজনীয় হতে পারে। আমি এই বিষয়ে ওপি তাদের পছন্দসমূহকে পরিষ্কার করার পরামর্শ দেওয়ার জন্য মন্তব্য করেছি ।
এলিয়াহ কাগন

run-partsস্ক্রিপ্টগুলি চালাবেন না (তাদের নামে একটি বিন্দু রয়েছে:my_folder/*.sh
jfs

1
run-partsহয়েছে নির্দিষ্ট very_ কিছু অদ্ভুত কারণে ফাইলের নাম প্রয়োজনীয়তা। এটি এক্সটেনশন সহ ফাইলের নাম প্রবর্তন করবে না, তাই আমি ভয় করি যে এটি এখানে কাজ করবে না।
টেরডন

1

ডিরেক্টরিতে সমস্ত *.shস্ক্রিপ্ট my_folderএকই সময়ে চালাতে xargs:

$ ls my_folder/*.sh | xargs -P0 -n1 bash

একযোগে সম্পাদিত স্ক্রিপ্টগুলির সংখ্যা সীমাবদ্ধ করতে 10:

$ ls my_folder/*.sh | xargs -P10 -n1 bash

lsস্ক্রিপ্টের আউটপুট ব্যবহার করা খারাপ অভ্যাস । ব্যবহার findকরা অনেক বেশি নিরাপদ। এটি এখানে প্রথম আইটেম: mywiki.wooledge.org/BashPitfalls#for_f_in_.24.28ls_.2A.mp3.29
জো

@ জো সাধারণভাবে, এটি সত্য। আমি এই বিশেষ ক্ষেত্রে সমস্যাগুলি দেখতে পাচ্ছি না।
jfs

কারণ আপনি এটি সম্পর্কে ইতিমধ্যে জানেন। লোকেরা এখানে পরে আসতে পারে না।
জো

@ জো অন্ধভাবে ডগমা অনুসরণ করেন না। নিজের জন্য ভাবেন যে আপনার ক্ষেত্রে ট্রেড অফগুলি কীসের চেয়ে অপশনগুলির চেয়ে একটি বিকল্প।
jfs

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