একাধিক ক্রোন জব চালান যেখানে একটি কাজ দীর্ঘ সময় নেয়


16

ক্রোন জব সংক্রান্ত আমার নিম্নোক্ত সাধারণ প্রশ্ন রয়েছে।

ধরা যাক আমার মধ্যে নিম্নলিখিতগুলি রয়েছে crontab:

* 10 * * * * someScript.sh
* 11 * * * * someScript2.sh
30 11 */2 * * someScript3.sh  <-- Takes a long time let's say 36 hours.
* 12 * * * someScript4.sh

যথাযথ সময়ে বাকি কাজগুলি চালানো কি যথেষ্ট স্মার্ট? উদাহরণস্বরূপ, দীর্ঘ স্ক্রিপ্টটি শেষ করার দরকার নেই?

এছাড়াও, যদি প্রাথমিক দীর্ঘ স্ক্রিপ্টটি এখনও চলমান থাকে এবং এটি ক্রোন দ্বারা আবার কল হয় তবে কী ঘটে?

ধন্যবাদ!


ক্রোন কতক্ষণ চাকরি চালায় তা যত্ন করে না; এটি অতিরিক্ত কপি চালাবে।
জেফ শ্যাচলার

আপনার প্রশ্নগুলি সঠিকভাবে ফর্ম্যাট করা আছে তা নিশ্চিত করুন।
ব্রাম

উত্তর:


31

প্রতিটি ক্রোন জব আপনার নির্ধারিত অন্য যে কোনও কাজের চেয়ে স্বাধীনভাবে কার্যকর করা হয়। এর অর্থ হ'ল আপনার দীর্ঘকালীন স্ক্রিপ্টটি নির্দিষ্ট সময়ে নির্ধারিত সময়ে অন্য কাজগুলিকে বাধা দেয় না।

যদি আপনার স্ক্রিপ্টগুলির কোনও এখনও তাদের পরবর্তী নির্ধারিত ক্রোন ব্যবধানে সম্পাদন করে থাকে, তবে আপনার স্ক্রিপ্টের আরেকটি, সমবর্তী, উদাহরণটি কার্যকর করা হবে।

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

আপনার স্ক্রিপ্টে লক ফাইল প্রয়োগের উপায়গুলির বিশদ জানতে নিম্নলিখিত প্রশ্নের উত্তরগুলি একবার দেখুন:


8

উপযুক্ত সময় দ্বারা আপনি কী বোঝেন তা নিশ্চিত নন। ক্রোন এটি করার সময় নির্ধারিত সময়ে কাজ শুরু করবে। এটি অন্য নির্ধারিত কাজ বা কোনও কাজের অন্যান্য দৃষ্টান্তগুলি পরীক্ষা করে না।

সুতরাং আপনার নির্ধারিত বৈধ কাজ নির্ধারিত সময়ে শুরু হবে। নির্ধারিত ব্যবধানের চেয়ে দীর্ঘতর যে কোনও কাজ একাধিকবার শুরু হবে। এটি প্রয়োজনে যদি একাধিকবার চালানো থেকে রক্ষা করার জন্য কাজটি লিখেছিল তার দায়িত্ব is উদাহরণস্বরূপ কোনও লক ফাইল বা পিআইডি ফাইল বা কিছু পরীক্ষা করা।

সমান্তরালভাবে চলতে পারে এমন প্রক্রিয়াগুলির পরিমাণের স্পষ্ট সীমাবদ্ধতা রয়েছে তবে সেগুলি ক্রোন নির্দিষ্ট নয়।


6

অন্যান্য উত্তরের পাশাপাশি, বিশেষত @ সলককে পোস্ট করা লিঙ্ক: আপনি যদি খুব দীর্ঘ ব্যবধান সহ একটি দীর্ঘ চলমান কমান্ড নির্ধারণ করেন, ক্রোন প্রথমটি সম্পূর্ণ হওয়ার আগে দ্বিতীয়টি সফলভাবে সম্পাদন করবে (যদি না কমান্ডটিতে কোনও ধরণের মিটেক্স প্রয়োগ করা থাকে) ।

এটি প্রায়শই মূল কমান্ডটি আরও ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে কমিয়ে দেয় s

প্রতিরোধের সাধারণ উপায় হ'ল একটি প্রহরী দিয়ে কমান্ডটি চালানো শর্ত হ'ল এটি নিশ্চিত করে যে কোনও পূর্ববর্তী কমান্ডটি চলছে না। উদাহরণ স্বরূপ:

10 * * * * pgrep my_slow_command >/dev/null || /usr/local/bin/my_slow_command

নিশ্চিত হয়ে নিন যে পিগ্রেপ কমান্ডের সাথে এটি চলাকালীন নামের সাথে মেলে যেমন উদাহরণস্বরূপ পাইথন স্ক্রিপ্টগুলিতে এক্সিকিউটেবলের নাম হিসাবে পাইথন রয়েছে যা সম্ভবত যথেষ্ট নির্দিষ্ট নয় এবং আপনাকে পাইথনের স্ক্রিপ্টের নামের সাথেও মিল রাখতে হবে।

10 * * * * pgrep -f my_script.py || /usr/local/bin/my_script.py

('-f' বিকল্প ছাড়াই পিগ্রেপ বাশ স্ক্রিপ্টের নামের সাথে মেলে যদিও)

আপনি যদি কোনও কারণে পিগ্রেপ ব্যবহার করতে না পারেন:

10 * * * * ps ax | grep [m]y_command || /usr/local/bin/my_command

গ্রেপ কমান্ড নিজেই মেলে না এড়াতে বন্ধনী ব্যবহার করা হয়।


0

আমি ব্যবহার flock

* * * * * exec flock --nonblock .ws_client.lock -c ws_client.py >& /tmp/ws_client.out
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.