রেলের পরিবেশে নির্ধারিত কাজগুলি চালানোর সর্বোত্তম উপায় কী? স্ক্রিপ্ট / রানার? মই দিয়া আহরণ করা? আমি প্রতি কয়েক মিনিট পরে টাস্কটি চালাতে চাই।
রেলের পরিবেশে নির্ধারিত কাজগুলি চালানোর সর্বোত্তম উপায় কী? স্ক্রিপ্ট / রানার? মই দিয়া আহরণ করা? আমি প্রতি কয়েক মিনিট পরে টাস্কটি চালাতে চাই।
উত্তর:
আমি রেক পদ্ধতির ব্যবহার করছি ( হিরকু দ্বারা সমর্থিত )
Lib / Tasks / cron.rake নামক একটি ফাইল সহ ..
task :cron => :environment do
puts "Pulling new requests..."
EdiListener.process_new_messages
puts "done."
end
কমান্ড লাইন থেকে কার্যকর করতে, এটি কেবল "রেক ক্রোন"। এই কমান্ডটি তখন অপারেটিং সিস্টেম ক্রোন / টাস্ক শিডিয়ুলারের পছন্দ অনুযায়ী রাখা যেতে পারে।
আপডেট করুন এটি বেশ পুরানো প্রশ্ন এবং উত্তর! কিছু নতুন তথ্য:
load "#{Rails.root}/lib/tasks/cron.rake"
এবং করেছি rake cron
, তবে নেমআরার পেয়েছি: মূল জন্য অপরিজ্ঞাত স্থানীয় পরিবর্তনশীল বা পদ্ধতি 'ক্রোন': অবজেক্ট
:environment
নির্ভরতা। আমাদের কাছে খুব ভারী রেইল অ্যাপ্লিকেশন রয়েছে যা শুরু হতে দীর্ঘ সময় নেয়, আমাদের রাকে প্রতি মিনিটে ডাকা হয় এবং টাস্কটি সম্পাদন করে এমন রিল পরিবেশ শুরু করতে আরও সংস্থান গ্রহণ করে । আমি ক্রোন মাধ্যমে কল করার জন্য ইতিমধ্যে শুরু হওয়া রেল পরিবেশগুলি পছন্দ করতে চাই, নিয়ামক পদ্ধতির এবং রেক পরিবেশের মধ্যে কিছু হতে হবে ।
আমি যখনই প্রকল্পগুলিতে তফসিলযুক্ত কাজের উপর নির্ভর করে খুব জনপ্রিয় ব্যবহার করেছি এবং এটি দুর্দান্ত। ক্রন্টব্যাট বিন্যাসের সাথে ডিল করার পরিবর্তে আপনার নির্ধারিত কাজগুলি সংজ্ঞায়িত করতে আপনাকে একটি দুর্দান্ত ডিএসএল দেয়। পুনরায় পড়া থেকে:
যখনই কোনও রুবি রত্ন যা ক্রোন জব লেখার জন্য এবং নিযুক্ত করার জন্য একটি সুস্পষ্ট সিনট্যাক্স সরবরাহ করে।
README থেকে উদাহরণ:
every 3.hours do
runner "MyModel.some_process"
rake "my:rake:task"
command "/usr/bin/my_great_command"
end
every 1.day, :at => '4:30 am' do
runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end
আমাদের প্রকল্পে আমরা যখনই প্রথম রত্ন ব্যবহার করি তবে কিছু সমস্যার মুখোমুখি হয়েছি।
এরপরে আমরা রুফস স্কিডুলার রত্নে স্যুইচ করেছিলাম , যা রেলগুলিতে কর্মসূচি নির্ধারণের জন্য খুব সহজ এবং নির্ভরযোগ্য বলে প্রমাণিত হয়েছিল।
আমরা এটি সাপ্তাহিক এবং প্রতিদিনের মেলগুলি প্রেরণের জন্য এবং এমনকি পর্যায়ক্রমিক রেকের কোনও কাজ বা কোনও পদ্ধতি চালানোর জন্য ব্যবহার করেছি।
এতে ব্যবহৃত কোডটি হ'ল:
require 'rufus-scheduler'
scheduler = Rufus::Scheduler.new
scheduler.in '10d' do
# do something in 10 days
end
scheduler.at '2030/12/12 23:30:00' do
# do something at a given point in time
end
scheduler.every '3h' do
# do something every 3 hours
end
scheduler.cron '5 0 * * *' do
# do something every day, five minutes after midnight
# (see "man 5 crontab" in your terminal)
end
আরও জানার জন্য: https://github.com/jmettraux/rufus-scheduler
আপনার কাজগুলি সমাপ্ত হতে খুব বেশি সময় নেয় না বলে ধরে নেওয়া, প্রতিটি কাজের জন্য একটি ক্রিয়া সহ একটি নতুন নিয়ামক তৈরি করুন। কন্ট্রোলার কোড হিসাবে টাস্কটির যুক্তি প্রয়োগ করুন, তারপরে ওএস পর্যায়ে একটি ক্রোনজব সেট আপ করুন যা এই নিয়ামকের URL এবং উপযুক্ত সময় বিরতিতে ক্রিয়াটির অনুরোধ করতে উইজেট ব্যবহার করে। এই পদ্ধতির সুবিধাগুলি হ'ল:
স্ক্রিপ্ট / রানার এবং রেক টাস্ক ক্রোন জব হিসাবে চালানোর জন্য পুরোপুরি সূক্ষ্ম।
ক্রোন জবগুলি চালানোর সময় আপনার অবশ্যই একটি গুরুত্বপূর্ণ বিষয় মনে রাখতে হবে। এগুলি সম্ভবত আপনার অ্যাপের মূল ডিরেক্টরি থেকে কল করা হবে না। এর অর্থ ফাইলগুলির জন্য আপনার সমস্ত প্রয়োজনীয় (গ্রন্থাগারের বিপরীতে) সুস্পষ্ট পথ দিয়ে করা উচিত: উদাহরণস্বরূপ ফাইল.ডায়ারনাম (__ ফাইলাইল) + "/ অন্যান্য_ফাইলে"। এর অর্থ হ'ল আপনাকে অন্য ডিরেক্টরি থেকে কীভাবে স্পষ্টভাবে কল করতে হবে তা জানতে হবে :-)
আপনার কোডটি অন্য ডিরেক্টরি থেকে চালানো সমর্থন করে কিনা তা পরীক্ষা করে দেখুন
# from ~
/path/to/ruby /path/to/app/script/runner -e development "MyClass.class_method"
/path/to/ruby /path/to/rake -f /path/to/app/Rakefile rake:task RAILS_ENV=development
এছাড়াও, ক্রোন জবগুলি সম্ভবত আপনার মতো চলবে না, সুতরাং আপনি .bashrc এ দেওয়া কোনও শর্টকাটের উপর নির্ভর করবেন না। তবে এটি কেবল একটি স্ট্যান্ডার্ড ক্রোন টিপ ;-)
যখনই (এবং ক্রোন) এর সাথে সমস্যাটি হ'ল এটি যতবার সম্পাদিত হবে ততবারই রেলের পরিবেশ পুনরায় লোড করে দেয়, এটি আপনার আসল সমস্যা যখন আপনার কাজগুলি ঘন ঘন হয় বা অনেক কাজ শুরু করার কাজ করে। এর কারণে আমার প্রযোজনায় সমস্যা হয়েছে এবং আপনাকে অবশ্যই সতর্ক করতে হবে।
রুফাসের শিডিয়ুলার এটি আমার জন্য করে ( https://github.com/jmettraux/rufus-scheduler )
আমার দীর্ঘকালীন চাকরির সময়, আমি দেরী_জব ( https://github.com/collectiveidea/delayed_job ) দিয়ে এটি ব্যবহার করি
আশা করি এটা কাজে লাগবে!
আমি রেসিকিউ / রেসিকিউ শিডিয়ুলারের বড় ফ্যান । আপনি কেবল পুনরাবৃত্তি ক্রোন-জাতীয় কার্যগুলি চালাতে পারবেন না তবে নির্দিষ্ট সময়েও কাজগুলি করতে পারেন। ক্ষতিটি হ'ল এর জন্য একটি রেডিস সার্ভার প্রয়োজন।
এটি আকর্ষণীয় যে কেউ সাইডটিকের কথা উল্লেখ করেনি । আপনি যদি ইতিমধ্যে Sidekiq ব্যবহার করেন তবে এটি দুর্দান্ত সংযোজন।
সাইডটিক সাইডিকিকের জন্য পুনরাবৃত্তিকারী কর্মীদের সংজ্ঞা দেওয়ার জন্য একটি সহজ এপিআই সরবরাহ করে।
কাজটি দেখতে এইরকম দেখাবে:
class MyWorker
include Sidekiq::Worker
include Sidetiq::Schedulable
recurrence { hourly.minute_of_hour(15, 45) }
def perform
# do stuff ...
end
end
দুজনেই ঠিকঠাক কাজ করবে। আমি সাধারণত স্ক্রিপ্ট / রানার ব্যবহার করি।
এখানে একটি উদাহরণ:
0 6 * * * cd /var/www/apps/your_app/current; ./script/runner --environment production 'EmailSubscription.send_email_subscriptions' >> /var/www/apps/your_app/shared/log/send_email_subscriptions.log 2>&1
আপনি যদি আপনার ডাটাবেসের সাথে সংযোগের জন্য সঠিক কনফিগারেশন ফাইলগুলি লোড করেন তবে এটি করার জন্য খাঁটি-রুবি স্ক্রিপ্টও লিখতে পারেন।
স্মৃতি মূল্যবান হলে একটি জিনিস মনে রাখবেন তা হ'ল স্ক্রিপ্ট / রানার (বা 'রেক টাস্ক যা' পরিবেশের উপর নির্ভর করে) পুরো রেল পরিবেশকে লোড করবে। আপনার যদি কেবল ডাটাবেসে কিছু রেকর্ড সন্নিবেশ করতে হয় তবে এটি মেমরিটি আপনাকে ব্যবহার করবে না। আপনি যদি নিজের স্ক্রিপ্টটি লিখেন তবে আপনি এড়াতে পারেন। আমার এখনও এটি করার দরকার নেই, তবে আমি এটি বিবেচনা করছি।
ব্যবহারের Craken (মই দিয়া আহরণ করা কেন্দ্রিক cron কাজ)
আমি ব্যাকগ্রাউন্ডআরবি ব্যবহার করি।
http://backgroundrb.rubyforge.org/
আমি এটি নির্ধারিত কাজগুলি চালানোর জন্য এবং সেইসাথে সাধারণ ক্লায়েন্ট / সার্ভারের সম্পর্কের জন্য খুব বেশি সময় নেয় এমন কাজগুলি চালাতে ব্যবহার করি।
আমি কীভাবে আমার ক্রোন কার্যগুলি সেটআপ করেছি তা এখানে। আমার কাছে একটি এসকিউএল ডাটাবেস (রেক ব্যবহার করে) এর প্রতিদিনের ব্যাকআপগুলি তৈরি করতে হবে এবং অন্যটিতে মাসে একবার ক্যাশে শেষ হবে। যে কোনও আউটপুট ফাইল লগ / ক্রোন_লগে লগ হয়। আমার ক্রোনটব এর মতো দেখাচ্ছে:
crontab -l # command to print all cron tasks
crontab -e # command to edit/add cron tasks
# Contents of crontab
0 1 * * * cd /home/lenart/izziv. whiskas.si/current; /bin/sh cron_tasks >> log/cron_log 2>&1
0 0 1 * * cd /home/lenart/izziv.whiskas.si/current; /usr/bin/env /usr/local/bin/ruby script/runner -e production lib/monthly_cron.rb >> log/cron_log 2>&1
প্রথম ক্রোন টাস্কটি প্রতিদিনের ডিবি ব্যাকআপ করে। ক্রোন_টাস্কের সামগ্রীগুলি নিম্নলিখিত:
/usr/local/bin/rake db:backup RAILS_ENV=production; date; echo "END OF OUTPUT ----";
দ্বিতীয় কাজটি পরে সেটআপ করা হয়েছিল এবং মাসে একবার ক্যাশে শেষ হওয়ার জন্য স্ক্রিপ্ট / রানার ব্যবহার করে (lib / মাসিক_ক্রোন.আরবি):
#!/usr/local/bin/ruby
# Expire challenge cache
Challenge.force_expire_cache
puts "Expired cache for Challenges (Challenge.force_expire_cache) #{Time.now}"
আমি অনুমান করি যে আমি অন্য কোনও উপায়ে ডাটাবেস ব্যাকআপ করতে পারি তবে এখনও পর্যন্ত এটি আমার পক্ষে কার্যকর হয় :)
পাথ মই দিয়া আহরণ এবং রুবি বিভিন্ন সার্ভারে পরিবর্তিত হতে পারে। আপনি যেগুলি ব্যবহার করে তা দেখতে পাচ্ছেন:
whereis ruby # -> ruby: /usr/local/bin/ruby
whereis rake # -> rake: /usr/local/bin/rake
সাইডিকিক বা রেসকি কিছু ব্যবহার করা আরও শক্তিশালী সমাধান। তারা উভয়ই চাকরি পুনরায় চেষ্টা, একটি রেডিস লক, মনিটরিং এবং সময় নির্ধারণের সাহায্যে সমর্থন করে।
মনে রাখবেন যে রেসেক হ'ল একটি মৃত প্রকল্প (সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয়নি), তাই সাইডিকিক একটি উপায়ের বিকল্প। এটি আরও পারফরম্যান্ট: সাইডিকিক একক, মাল্টিথ্রেড প্রক্রিয়াতে একাধিক কর্মী চালাচ্ছেন এবং রেসেক প্রতিটি কর্মী পৃথক প্রক্রিয়াতে চালাচ্ছেন।
আমি যে প্রকল্পগুলিতে কাজ করছি তার জন্য আমি সম্প্রতি কিছু ক্রোন জব তৈরি করেছি।
আমি খুঁজে পেয়েছি যে মণি ক্লকওয়ার্ক খুব দরকারী।
require 'clockwork'
module Clockwork
every(10.seconds, 'frequent.job')
end
আপনি এই মণিটি ব্যবহার করে আপনার পটভূমির কাজটিও নির্ধারণ করতে পারেন। ডকুমেন্টেশন এবং আরও সহায়তার জন্য https://github.com/Rykian/ ਕਲਾ ্কওয়ার্ক দেখুন
ক্রোন তৈরির জন্য আপনি ব্যবহার করতে পারেন resque
এবং resque-schedular
মণি করতে পারেন , এটি করা খুব সহজ।
একবার আমাকে একই সিদ্ধান্ত নিতে হয়েছিল এবং আমি আজ সেই সিদ্ধান্তে সত্যই খুশি। রেসিউ শিডিয়ুলারটি ব্যবহার করুন কারণ কেবলমাত্র কোনও পৃথক রেডিস আপনার ডিবি থেকে বোঝা নেবে না, আপনার কাছে রিসেক-ওয়েবের মতো অনেকগুলি প্লাগইন অ্যাক্সেস থাকতে পারে যা দুর্দান্ত ইউজার ইন্টারফেস সরবরাহ করে। আপনার সিস্টেমটি বিকাশের সাথে সাথে আপনার শিডিউল করার আরও এবং আরও বেশি কাজ করতে হবে যাতে আপনি সেগুলি একক জায়গা থেকে নিয়ন্ত্রণ করতে সক্ষম হবেন।
সম্ভবত এটি করার সর্বোত্তম উপায় হ'ল আপনার প্রয়োজনীয় কাজগুলি লেখার জন্য রেক ব্যবহার করা এবং কেবল কমান্ড লাইনের মাধ্যমে এটি সম্পাদন করা।
আপনি রেলকাস্টে একটি খুব সহায়ক ভিডিও দেখতে পারেন
এই অন্যান্য সংস্থানগুলিও একবার দেখুন:
আমি ক্লকওয়ার্ক মণি ব্যবহার করেছি এবং এটি আমার পক্ষে বেশ ভাল কাজ করে। এছাড়াও clockworkd
রত্ন রয়েছে যা স্ক্রিপ্টকে ডেমন হিসাবে চালানোর অনুমতি দেয়।
আমি সত্যিই নিশ্চিত নই, আমার ধারণা এটি কাজটির উপর নির্ভর করে: কতবার চালানো যায়, কতটুকু জটিল এবং রেল প্রকল্পের সাথে কতটা সরাসরি যোগাযোগের প্রয়োজন হয় ইত্যাদি। আমার ধারণা যদি কেবল "একটি সেরা উপায়" থাকত তবে কিছু করতে , এটি করার মতো অনেকগুলি ভিন্ন উপায় ছিল না।
একটি রেলস প্রকল্পে আমার শেষ কাজটিতে, আমাদের একটি ব্যাচের আমন্ত্রণ মেলার তৈরি করা দরকার (সার্ভে আমন্ত্রণ, স্প্যামিং নয়) যা সার্ভারের সময় যখনই পরিকল্পনাযুক্ত মেইলগুলি প্রেরণ করা উচিত। আমি মনে করি যে আমি তৈরি করা রেক টাস্কগুলি চালাতে আমরা ডেমন সরঞ্জামগুলি ব্যবহার করব।
দুর্ভাগ্যক্রমে, আমাদের সংস্থার কিছু অর্থ সমস্যা ছিল এবং মূল প্রতিদ্বন্দ্বী দ্বারা এটি "কেনা" হয়েছিল যাতে প্রকল্পটি কখনই শেষ হয়নি, তাই আমরা জানি না যে আমরা শেষ পর্যন্ত কী ব্যবহার করতাম।
আমি ক্রোন চালানোর জন্য স্ক্রিপ্ট ব্যবহার করি, এটি ক্রোন চালানোর সেরা উপায়। ক্রোন এর জন্য এখানে কিছু উদাহরণ দেওয়া হয়েছে,
ক্রোনট্যাব খুলুন -> সুডো ক্রন্টব -e
এবং বেলো লাইনগুলি পেস্ট করুন:
00 00 * * * উইজেট https: // আপনার_হোস্ট / কিছু_API_end_Point
এখানে কিছু ক্রোন ফর্ম্যাট, আপনাকে সাহায্য করবে
::CRON FORMAT::
Examples Of crontab Entries
15 6 2 1 * /home/melissa/backup.sh
Run the shell script /home/melissa/backup.sh on January 2 at 6:15 A.M.
15 06 02 Jan * /home/melissa/backup.sh
Same as the above entry. Zeroes can be added at the beginning of a number for legibility, without changing their value.
0 9-18 * * * /home/carl/hourly-archive.sh
Run /home/carl/hourly-archive.sh every hour, on the hour, from 9 A.M. through 6 P.M., every day.
0 9,18 * * Mon /home/wendy/script.sh
Run /home/wendy/script.sh every Monday, at 9 A.M. and 6 P.M.
30 22 * * Mon,Tue,Wed,Thu,Fri /usr/local/bin/backup
Run /usr/local/bin/backup at 10:30 P.M., every weekday.
আশা করি এটা তোমাকে সাহায্য করবে :)