Logo for Parsclick

ساخت Cron Jobs

  محمد محمودی محمد محمودی
  March 14, 2016 at 6:02 PM
  ۲۴ اسفند، ۱۳۹۴ ساعت ۱۸:۰۲

Cron jobs چیست ؟

Cron jobs یه قابلیت برای سیستم های یونیکس بیس هست که به برنامه نویسان کمک می کنه کار هارو تو زمان های معلوم شده مدیریت کنند (منظور از کارها فانکشن هایی که داخله پروژه نوشته ایم ).

چرا باید از Cron jobs در پروژه ها استفاده کنیم؟

تا حالا social network یا commerce ساختید ؟ یکی از ارکان اصلی این سایت ها ارسال ایمیل خودکار از اخرین رویداد های سایت است مثلا کاربر ۱ هفته social network سر نزده ما به کاربر یه ایمیل می زنیم و اخرین مطالب دوستانش رو بهش اطلاع میدیم به طور مثال سرویس هایی مثله instagram یا twitter که هر هفته به ما گزارش میدن ! این کار باعث میشه دوباره کاربر رو تحریک کنیم تا به سایت ما بازگردند ! ( البته من سایت هایی رو دیدم که این کارو دستی انجام میدن که باید بگم خیلی تباهن!).

Syntax Cron Jobs

سینتکس corn job برای لینوکس یه کاره طاقت فرسا هست ( لینک ویکی ) و هر کسی نمی تونه با این ستاره ها کار کنه ( البته با تکرار زیاد چرا که نه ) ، ولی ما از جم ها کمک می گیریم ! که فوق العاده اسون تر نسبت به سینتکس اصلی cron job هست!

خوب بریم شروع کنیم اول از همه تو جم فایل whenever رو ایمپورت می کنیم:

gem 'whenever', :require => false

حالا دستور bundle رو دوباره تو cmd بزنید تا جم نصب بشه!

وارد دایرکتوری پروژه بشید و wheneverize بزنید تا فایل config/schedule.rb رو برای ما بسازه ( داخل این فایل ما job هامونو تعریف می کنیم).

فایل schedule.rb رو باز کنید و کار های خودتونو طبق مثال های زیر تعریف کنید!

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

every :hour do
runner "SomeModel.ladeeda"
end

every :sunday, :at => '12pm' do
runner "Task.do_something_great"
end

every '0 0 27-31 * *' do
command "echo 'you can use raw cron syntax too'"
end

every :day, :at => '12:20am', :roles => [:app] do
rake "app_server:task"
end

با Runner می تونید فانکشن های Model رو فراخوانی کنید ! rake و command هم که مشخصه!

برای خروجی گرفتن از ارورهای احتمالی توسط con job می تونید از این کد استفاده کنید .

:output => {:error => 'error.log', :standard => 'cron.log'}

مثال:

runner "MyModel.some_process", :output => {:error => 'error.log', :standard => 'cron.log'}

الان می تونید پروژه تونو اجرا کنید و نتیجه رو ببینید !

نکته : اگر پروژه رو اجرا کردید و می خواید فایل schedule.rb رو اپدیت کنید باید از دستور زیر استفاده کنید :

bundle exec whenever --update-crontab 

لینک ها:

ویکی

گیت هاب

برای ارتباط با من می تونید از ایمیل پارس کلیک استفاده کنید :

mohammad@parsclick.net