ব্যবহারকারী ক্রোন কাজের জন্য একটি কিল ইনস্টল বা অন / অফ স্যুইচ করার জন্য কি কোনও প্রতিষ্ঠিত নিদর্শন রয়েছে?


8

আমাদের দীর্ঘকালীন বিল্ড রয়েছে যা সাধারণত আমরা আমাদের ক্রোন জবগুলিকে প্রায় শিডিউল করে থাকি তবে উপলক্ষে আমাদের একটি অ-মানক সময়সীমার সময় আবার একটি বিল্ড চালাতে হয় এবং ক্রোন জবসের সাথে দ্বন্দ্বের মধ্যে পড়তে পারে যা সেই সময়গুলিতে চালানো নিরাপদ are

আমাদের একাধিক অ্যাকাউন্ট রয়েছে যা বিল্ড এবং ক্রোন উভয় কাজ চালায়, তাই আমরা পুরো মেশিনের জন্য ক্রন্টব পরিষেবাটি স্থগিত করতে পারি না এবং পরে এটি পুনরায় আরম্ভ করতে পারি না।

আমি ভাবছিলাম কারও প্যাটার্ন বা বাস্তবায়ন আছে কিনা। আমি এই মত কাজ কল্পনা

ব্যবহারকারী একটি ফাইল তৈরি করে: block / block-crontab
ব্যবহারকারী বিল্ড চালায় ক্রোন জব ব্যবহারকারীর বাড়ির ডায়ারে সেই ফাইলটি সন্ধান করে এবং যদি এটি কেবল থাকে তবে সমস্ত ক্রোন কাজ এড়িয়ে যায়। অন্যথায় এটি কাজ চালায় তারপরে বিল্ডটি সম্পন্ন করার পরে, ব্যবহারকারী ~ / ব্লক-ক্রন্টব সরিয়ে দেয়

কাজ করবে? আমি অনুমান করছি আমার কোনওভাবে ক্রোন লিপিটি পরিবর্তন করতে হবে। আমি বেশিরভাগ ক্ষেত্রেই ভাবছি যে এই বিষয়ে আরও ভাল / মানক পদ্ধতির আছে?

ধন্যবাদ।


আপনি কি বলতে চাইছেন [the build] can run into conflicts with from jobs that are tipically safe to run at those times? বিল্ড নন-বিল্ড কাজ রয়েছে যা বিল্ড চলাকালীন চলতে পারে না? সমস্ত কাজ কি একে অপরের সাথে পারস্পরিক একচেটিয়া? নাকি শুধু বিল্ড সম্পর্কে?
জিএনপি

1
আপনি কি ইন্ট্রো দেখেছেন flockবা run-one(ডেবিয়ান / উবুন্টু)? serverfault.com/questions/82857/…
স্টেফান লাসিউইস্কি

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

ঝাঁক বা চালানো একের দিকে তাকাতে হয়নি। ধন্যবাদ।
শান

উত্তর:


10

গণ্ডগোলের পরিবর্তে crondআমি দৃ build়ভাবে আপনার বিল্ড স্ক্রিপ্টগুলির ভিতরে কিছু (এমনকি সাধারণ) ফর্মটি কার্যকর করার পরামর্শ দিচ্ছি। উদাহরণস্বরূপ, কোনও ফাইলের জন্য স্পর্শ করুন এবং পরীক্ষা করুন /var/run/: যদি আপনার স্ক্রিপ্টটি অন্য কোনও প্রক্রিয়াটির চেয়ে প্রকল্পটি নির্মাণ করে, কিছু খুঁজে পায়। শেষ হয়ে গেলে অবশ্যই আপনার অবশ্যই লকফিলটি সরিয়ে ফেলতে হবে।

@ জিএনপি মন্তব্যগুলিতে উল্লেখ করেছে, আপনি flockনিজের লকফিলগুলি আধা-স্বয়ংক্রিয়ভাবে পরিচালনা করার জন্যও ইউটিলিটিটি ব্যবহার করতে পারেন ।

আপনি যদি কোনও লকিং মেকানিজমের উপর নির্ভর করতে না পারেন service crond stopতবে crondসিস্টেমটি বন্ধ করার জন্য সরল একটি জারি করুন ।


2
flockকমান্ড এই উত্তরটি একটা চমৎকার ছাড়াও হতে হবে। এটি লক ফাইলটি হ্যান্ডেল করে এবং এতে সমস্ত সামান্য বিবরণ রয়েছে।
জিএনপি

@ জিএনপি চমৎকার পরামর্শ! আমি সেই অনুযায়ী আমার উত্তর আপডেট করেছি
shodanshok

1
কেবল সচেতন থাকুন যে flockফাইল ডিসক্রিপটরটি শিশু প্রক্রিয়াগুলির সাথে উত্তরাধিকার সূত্রে প্রাপ্ত হয় যদি না আপনি এটি বন্ধ করতে কিছু পদক্ষেপ না করেন। এটি কখনও কখনও অপ্রত্যাশিত আচরণের কারণ হতে পারে বিশেষত যদি লোকেরা 'ব্যাকগ্রাউন্ড জবস' শুরু করে যা ক্রোনটিতে কার্যকর হয়।
ম্যাথু ইফেই

1

আমি কেবলমাত্র সমস্ত দীর্ঘ চলমান কমান্ডগুলিকে একটি স্ক্রিনে মোড়ানোর প্রবণতা রাখি এবং cronইতিমধ্যে যদি কোনও চলমান না থাকে তবেই স্ক্রিনটি শুরু করতে চাই।

সুতরাং নিম্নলিখিত লাইন crontab

*/2 * * * *  /bin/bash /path/to/LongRunningScript.bash

... এরকম কিছুতে পরিণত হয়:

*/2 * * * *  /usr/bin/screen -S MyUniqueName -Q select . || /usr/bin/screen -dmS MyUniqueName /bin/bash /path/to/LongRunningScript.bash

আমি এটি পছন্দ করি কারণ এটি আপনাকে একটি চলমান স্ক্রিপ্টের সাথে সংযুক্ত করার এবং এর আউটপুট / স্থিতি পরীক্ষা করার সুযোগ দেয়।

আপনার দৃশ্যে, আপনি cronকোনও বিল্ড কার্যকর করার আগে অন্য স্ক্রিনের জন্য পরীক্ষা করতে পারেন check

0 3 * * *  /usr/bin/screen -S ManualBuild -Q select . || /usr/bin/screen -dmS AutomatedBuild /bin/bash /path/to/BuildScripts.bash
10 3 * * *  /usr/bin/screen -S ManualBuild -Q select . || /usr/bin/screen -dmS OtherAutomatedBuild /bin/bash /path/to/OtherBuildScripts.bash

আপনি যখন ম্যানুয়াল বিল্ডটি screenচালান, স্ক্রিপ্টটি চালানোর আগে প্রথমে একটি হ্যাপ করুন (দয়া করে মন্তব্য করুন কীভাবে সংযোগ / সংযোগ বিচ্ছিন্ন করতে হয় সে সম্পর্কে আপনি যদি মন্তব্য করতে চান তবে screenএটি একটি দরকারী ইউটিলিটি - আপনি যদি এটি এখনও ব্যবহার না করা শুরু করেন তবে এটি একটি শট দিন)

আপনি যে কমান্ডগুলি চালাতে চান তা টাইপ করুন screen -S ManualBuild, হিট করুন [enter]এবং চালান।

দ্রষ্টব্য: সরবরাহ হিসাবে আপনি cronযদি উদাহরণটি ব্যবহার করেন তবে আপনার "ম্যানুয়াল বিল্ড" নামটি চালিয়ে একাধিক স্ক্রিন সেশন থাকলে বিভ্রান্ত করতে পারেন।


দুঃখিত, সবেমাত্র আপনার "একাধিক ব্যবহারকারীর জুড়ে" নোটটি দেখেছেন - এটি কোনও পরিবর্তন ছাড়াই ব্যবহারকারীদের মধ্যে কাজ করবে না। স্ক্রিনটি কোনওভাবে অন্য ব্যবহারকারীর সেশনে সংযোগ স্থাপনে সমর্থন করে কিনা তা পরীক্ষা করা দরকার।
trs

এটি একটি দুর্দান্ত ধারণা। আমি একবারে কয়েক মাসের জন্য তাদের শব্দ উইন্ডো খোলা রাখার অভ্যাসটি ভেঙে ফেলতে চাই। :)
শন

যদি তারা তাদের সেশনটি খোলা ছেড়ে দেয় তবে আপনি কোনও সংযুক্ত স্ক্রিনের সাথে সংযুক্ত করতে পারেন screen -x ScreenNameএবং আপনার ডিস্ট্রো (এর জন্য স্যুড সেটিংস screen) এর উপর নির্ভর করে আপনি অন্য স্ক্রিন সেশনকে শেয়ারযোগ্য করতে পারবেন। সবচেয়ে সহজ উপায় হ'ল এই বিল্ড কমান্ডগুলিকে একটি নির্দিষ্ট ব্যবহারকারীর নাম অনুসারে চালানো হবে যা আমি অনুমান করি, একই ব্যবহারকারীর ক্রোন জব রয়েছে।
trs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.