ক্রোন এর চেয়ে আরও বুদ্ধিমানের সাথে সার্ভারের কাজের শিডিউল কীভাবে করবেন?


15

আমি আমার সাইটের সামগ্রীতে পুনর্নির্দেশের জন্য প্রতি মিনিটে একটি কাজ চালাচ্ছি

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

এমন কোনও ধরণের বিদ্যমান সফ্টওয়্যার ব্যবহার করার কি অন্য উপায় রয়েছে যা আমাকে প্রতি মিনিটে একটি কাজ চালাতে দেবে, কিন্তু যদি সেই কাজটি ফিরে না আসে তবে তা অন্য কোনও উদাহরণ চালু করবে না (যেমন অনুসন্ধান ইঞ্জিন প্রক্রিয়া ব্যর্থ হয়েছে)?


4
ক্রোন সম্ভবত আপনি যা বলছেন ঠিক তাই করছে। আমি পরিবর্তে বুদ্ধি দিয়ে কাজটি পুনরায় লেখার পরামর্শ দিই।
gparent

উত্তর:


27

সমস্যাটি প্রকৃতপক্ষে ক্রোন নয় - এটি আপনার কাজের সাথে।

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

#!/bin/bash

function cleanup {
    echo "Cleanup"
    rmdir /tmp/myjob.lck
}

mkdir /tmp/myjob.lck ||  exit 1
trap cleanup EXIT
echo 'Job Running'
sleep  60
exit 0

এটি একটি টার্মিনালে চালান তারপরে 60০ সেকেন্ড শেষ হওয়ার আগে এটি অন্য টার্মিনালে চালানোর পরে এটি 1 স্ট্যাটাসের সাথে প্রস্থান করবে 1 প্রথম প্রক্রিয়াটি বের হয়ে গেলে আপনি এটি দ্বিতীয় টার্মিনাল থেকে চালাতে পারবেন ...

সম্পাদনা করুন:

আমি যেমন ঝাঁক সম্পর্কে জানতে পেরেছিলাম আমি ভেবেছিলাম এই উত্তরটি আপডেট করব। ফ্লক (1) ব্যবহার করা সহজ হতে পারে। এই ক্ষেত্রে flock -nউপযুক্ত মনে হবে যেমন

* * * * * /usr/bin/flock -n /tmp/myAppLock.lck /path/to/your/job   

প্রতি মিনিটে আপনার কাজ চালাবে তবে পশুপাল যদি ফাইলটিতে কোনও লক না পান তবে ব্যর্থ হবে।


2
বোকা প্রশ্ন হয়ত, তবে কোনও নিয়মিত ফাইলের চেয়ে বিশেষত ডিরেক্টরি ব্যবহারের কোনও সুবিধা আছে কি?
gparent

9
একটি নিয়মিত ফাইল ব্যবহার করতে বেশ কয়েকটি অপারেশন প্রয়োজন, এটি বিদ্যমান কিনা তা পরীক্ষা করে দেখুন, এটি যদি না তৈরি করে। এই ফাইলটি তৈরি করার অন্য একটি প্রক্রিয়ার সুযোগের উইন্ডো ছেড়ে দেয় - অগোছালো। এমকিডির এটি একটি পারমাণবিক অপারেশন যা হয় এটি কাজ করে এবং আপনি 'লক' পান বা এটি অন্য কোনও প্রক্রিয়া হিসাবে ইতিমধ্যে এটি পায় না।
ব্যবহারকারী 9517

বোধ হয়। লক ডিরেক্টরিতেও ভাল চিন্তাভাবনা। ধন্যবাদ
জন

2

একটি উপায় হ'ল আপনার রিইনডেক্স স্ক্রিপ্টটি একটি লক ফাইল তৈরি করা যাতে এটি স্ক্রিপ্টটি ইতিমধ্যে চালু আছে কিনা তা পরীক্ষা করে দেখতে পারে। অনুসন্ধান ইঞ্জিনটি চালু এবং চলছে কিনা তা দেখতে আপনি কিছু ব্যতিক্রম হ্যান্ডলিংয়ে যুক্ত করতে পারেন।

আরও জড়িত বিকল্প হ'ল রেস্কা এবং রেসেক-শিডিয়ুলারের মতো এক ধরণের টাস্ক কুইউর ব্যবহার করা:

https://github.com/blog/542-introducing-resque

https://github.com/bvandenbos/resque-scheduler#readme

কোয়েড এবং সাইডিকিক এছাড়াও রয়েছে:

https://github.com/bkeepers/qu

https://github.com/mperham/sidekiq

হ্যাঁ, এগুলি সব রুবিই কেন্দ্রিক, তবে আপনি আপনার পছন্দের ভাষায় "রেসকিউর মতো জিনিস" সন্ধান করতে পারেন।


0

এটিকে দ্রুত সেট আপ করার আর একটি উপায় হ'ল মেশিনটি শুরু হয়ে গেলে শেল স্ক্রিপ্ট শুরু করা (ক্রোন ' @reboot /path/to/my/script.sh' এর সাহায্যে এটি করতে পারে, তারপরে ক্রোনটি এটি শুরু করতে পুনরায় আরম্ভ করুন) এর মধ্যে এই জাতীয় কিছু দিয়ে।

#!/bin/sh
/opt/bin/run-site-index
sleep 60
exec $0

স্ক্রিপ্টটি চলতে থাকে, এবং আপনি কি কেবল একটি শুরু করেছেন - একবারে কতজন চলতে পারে তা - এটির চেয়ে বেশি আর কিছু নয়। সেখানকার কিছু স্মার্টগুলিও সূচকের কাজ চলছে কিনা তা পরীক্ষা করে দেখতে পারে এবং যদি না হয় তবে পুনরায় চালু করুন বা অন্যথায় সমস্যার কাউকে ঠিক / অবহিত করার চেষ্টা করুন।


-3

এর জন্য ক্রোন ব্যবহার না করে আমি আপনার চাকরিটি এমন একটি পরিষেবা হিসাবে আরও গড়ে তুলব যা একটি লুপে চালিত হয় এবং শেষ ধাপ হিসাবে 60 সেকেন্ডের জন্য ঘুমায়, বা সম্ভবত প্রক্রিয়া চলাকালীন বিভিন্ন পয়েন্টগুলিতে ছোট ব্যবধানের জন্য আরও প্রায়শই ঘুমায় আরও সমানভাবে


1
এটি সমস্যার সমাধান করবে না ক্রোন থেকে কোনও উন্নতি হবে না।
gparent

এটি সমস্যার সমাধান করবে, কারণ তখন কেবলমাত্র একটি প্রক্রিয়া চলে যা কখনও চলে। এটি ক্রোন সম্পূর্ণরূপে সরানো হবে।
জোয়েল কোয়েল

সার্চ ইঞ্জিনটি চলছে কিনা তা যদি 'পরিষেবা' না দেখায় এটি সমস্যার সমাধান করে না। তাঁর স্ক্রিপ্ট / কাজের যুক্তি ইস্যু। সম্পাদনা: আসলে আপনি কিছুটা ঠিক বলেছেন, এটি বিষয়টিকে কুৎসিতভাবে আড়াল করবে।
gparent
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.