কীভাবে ক্রোনকে স্ট্যাম্পেডিং থেকে রক্ষা করবেন?


13

বলুন আমার কাছে বেশ কয়েকটি ক্রোন স্ক্রিপ্ট রয়েছে যা প্রতি 15 মিনিটে চালানো দরকার। আমি তাদের চালানোর জন্য সেট করতে পারি: */15 * * * *তবে তারপরে তারা সবাই একই সাথে চালায়। সার্ভারটির পক্ষে বেশ কয়েক মিনিটের জন্য অলস থাকা এবং তারপরে হঠাৎ একসাথে কয়েক ডজন স্ক্রিপ্ট কার্যকর করার চেষ্টা করা নির্বোধ বলে মনে হয়।

1 মিনিট, 16, 31, 46 এবং 2, 17, 32, 47 এ আমার স্ক্রিপ্ট চালানোর কোনও উপায় আছে কি?

অন্য কথায়, আমি প্রতিটি স্ক্রিপ্ট প্রতি 15 মিনিটের মধ্যে চলতে চাই, তবে আমি যত্ন করি না যে তারা বিশেষত কোয়ার্টার আওয়ারের চিহ্নগুলিতে চলে।

উত্তর:


7

আপনি এটির প্রয়োজনের তুলনায় আরও শক্ত করে তুলছেন। সেমিকোলন দ্বারা পৃথক করে সমস্তকে একই লাইনে রাখুন:

*/15 * * * * command1 ; command 2 ; command 3

এটি চলবে command1, এটি শেষ হওয়ার জন্য অপেক্ষা করুন, তারপরে দৌড়াবেন command2, এটি শেষ হওয়ার জন্য অপেক্ষা করুন ইত্যাদি and


15

যদি আপনি আপনার ক্রোন জবটিকে এমন দেখায়: 6-59/15 * * * *তবে এটি ঘন্টা, 6, 21, 36 এবং 51 মিনিটে চলে যাবে।

এটি ক্রোন এর সমস্ত সংস্করণে কাজ নাও করতে পারে।


14

আপনি সমস্ত স্ক্রিপ্টগুলি একটি ডিরেক্টরিতে রাখতে পারেন, বলুন /etc/cron.15mএবং তারপরে ক্রোন রান করুন

*/15 * * * * run-parts /etc/cron.15m

এটি আপনার run-partsকমান্ডটি ধরে নিয়েছে। এটি কমপক্ষে সমস্ত ডেবিয়ান-ভিত্তিক সিস্টেমে উপস্থিত রয়েছে। এটি তালিকাবদ্ধ ক্রমে নামকৃত ডিরেক্টরিতে কার্যকর করা সমস্ত প্রোগ্রাম চালায়।

এই পদ্ধতির একটি অসুবিধা হ'ল যদি কোনও স্ক্রিপ্ট হ্যাং হয়, তবে সমস্তগুলি অপেক্ষা করবে এবং কার্যকর হবে না। যদি তাদের সবার রানের সময়টি 15 মিনিটের বেশি হয়, তবে কাজটি আবার শুরু হবে এবং আপনি প্রচুর প্রক্রিয়া চালিয়ে যেতে পারেন।


run-partsফেডোরা / রেড হ্যাট সিস্টেমে উপস্থিত রয়েছে।
mattdm

9

এটি করার সর্বাধিক সোজা উপায় হ'ল কমান্ডগুলি চালনার জন্য ম্যানুয়ালি সেটআপ করা যখন আপনি চান তখন:

0,15,30,45 * * * * command0
1,16,31,46 * * * * command1
2,17,32,47 * * * * command2
...
14,29,44,59 * * * * command14

অথবা আপনি যথাযথ ক্রন্টব এন্ট্রিগুলি স্বয়ংক্রিয়ভাবে উত্পন্ন করতে স্ক্রিপ্ট লিখতে পারেন (যা টাইপগুলি এড়ায়)।

ক্রনের কিছু সংস্করণ (সম্ভবত আপনি ব্যবহার করছেন এমন একটি সহ) বর্ধিত বাক্য গঠন গ্রহণ করে:

0-59/15 * * * * command0
1-59/15 * * * * command1
1-59/15 * * * * command2
...
14-59/15 * * * * command14

0

আপনি যা করার চেষ্টা করছেন তাতে ক্রোন সত্যই ভাল নয়। আপনি কি এমন স্ক্রিপ্ট লেখার কথা বিবেচনা করেছেন যা মূলত 15 মিনিট ঘুমায়, কমান্ডটি কার্যকর করে, এবং লুপ করবে?


1
এটি নিয়ে বেশ কয়েকটি সম্ভাব্য সমস্যা রয়েছে। একটি হ'ল আপনি যদি sleep 300কমান্ডের প্রতিটি প্রয়োগের মধ্যে কাজ করেন, কমান্ডের নিজস্ব প্রয়োগের ফলে সময় বয়ে যায়; এটি প্রতি 15:00 এর পরিবর্তে প্রতি 15:10 পর্যন্ত চলতে পারে। এবং যদি ব্যাকগ্রাউন্ড প্রক্রিয়াটি মারা যায় বা সিস্টেমটি পুনরায় বুট হয়, বিপরীতে crond, এটি স্বয়ংক্রিয়ভাবে পুনরায় আরম্ভ হবে না। একটি পটভূমি প্রক্রিয়া "ডিমনাইজেশন" করার উপায় রয়েছে, তবে তারপরে আপনি বেশ পুনরায় বাস্তবায়ন করছেন crond
কিথ থম্পসন

হ্যাঁ, আমি সম্মতি জানাই এটি একটি নিখুঁত সমাধান নয় (যদিও আপনি & এর সাথে টাস্কটি সবসময় পটভূমিতে দেখতে পারেন) তবে আপনি সেখানে যান।
ম্যাট সিমন্স 21

1
পরিবর্তে, ক্রোন কেবলমাত্র একটি একক স্ক্রিপ্ট রান করুন যা আপনার সমস্ত কমান্ডকে ঘুরিয়ে কার্যকর করে। প্রকৃতপক্ষে, এটি এত সাধারণ প্রয়োজন যে run-partsবেশিরভাগ ক্রোন ইনস্টলেশন সহ জাহাজগুলিকে বিশেষভাবে এটি করতে বলা হয় একটি স্ট্যান্ডার্ড স্ক্রিপ্ট । @ অ্যান্ড্রুশুলম্যানের উত্তর দেখুন।
টাইলারল

0

অনেকগুলি ডিস্ট্রিবিউশনে /etc/cron.d/cronhourly রয়েছে, যার জন্য সমস্ত স্ক্রিপ্টগুলি প্রতি ঘন্টা সঞ্চালিত হয়। এমনকি আপনি ক্রমিক সংখ্যাগুলি দিয়ে শুরু করে ক্রমটি নির্দিষ্ট করতে পারেন, যেমন 01scriptA 02scriptB - এটি ইতিমধ্যে একটি ক্রোন জ্ঞানের সাথে হালকা হওয়া উচিত যখন আপনি স্মুথওয়ালের লিনাক্স ডিস্ট্রো বেসকে কল করার সাথে সাথে আপনাকে "ক্রোনারলিবিফোর" তৈরি করতে হবে :)

সতর্কতার শব্দ: এটি পূর্বে প্রস্তাবিত হিসাবে রান-পার্টস ব্যবহার করে এবং রান-পার্টসটি ক এর সাথে স্ক্রিপ্ট পছন্দ করে না। নামে, সুতরাং এটিকে "মুছে ফেলা হবে না" ডেকে দিন "01deletehomefolders" এবং নিশ্চিত করুন যে আপনি ডান দিয়ে শুরু করেছেন! আপনি আপনার স্ক্রিপ্টটি ব্যাখ্যা করার উদ্দেশ্যে যা কিছু করুন তার জন্য লাইন।

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