Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

จัดตาราง Cron Jobs ใน Ruby ด้วย Whenever Gem: คู่มือ Step-by-Step

Cron คืออะไร? — Job Scheduling System ใน Linux และ MacOS

Run โปรแกรมไหนก็ได้ เวลาไหนก็ได้ — รวม Ruby Code!

ถ้ามี Recurring Task อยากรัน Auto ทุกวัน ทุกสัปดาห์ ทุกชั่วโมง — Cron คือคำตอบ

Task Examples:

  • Weekly Database Backup
  • Daily Website Activity Report
  • ส่ง Reminder Emails

มาค้นหาวิธีให้ Cron ทำงานให้คุณ!

Basics Of Cron

ทุก User มี Cron File ใส่ Tasks — Edit: crontab -e, List: crontab -l

Example Cron Job:

 0 0 * * * /opt/rubies/ruby-2.5.1/bin/rake db:backup 

Syntax ยากจำ อาจไม่อยาก Edit เองตลอด — มี Gems ทำง่ายขึ้นไหม? มี!

วิธีใช้ Whenever Gem

Cron Syntax ยากจำ -> 用 whenever Gem

Gem นี้ Define Cron Jobs ใน Ruby

Install Gem ก่อน — สร้าง Config File:

 wheneverize . # [add] config/schedule.rb 

เปิดมา — มี Examples Commented Out ลบได้

อยาก Backup Job รันทุกชั่วโมง — เขียนใน config/schedule.rb:

 every 1.hour do
  rake "db:backup"
end

Options:

  • rake (Rake Task ในโปรเจกต์, db:backup ไม่ Default แตลอง db:version)
  • runner (Ruby Class + Method, เช่น Archive.backup_now)
  • command (System Command)

ตอนนี้: รัน whenever --update-crontab Generate Cron Entries — crontab -l ดูได้

ได้แบบนี้:

 0 * * * * /bin/bash -l -c 'cd /home/jesus/testing && RAILS_ENV=production bundle exec rake db:backup --silent' 

Task รันใน production Mode — อยากเปลี่ยน? Setting นี้: set :environment, "development" (ใน schedule.rb บนสุด) หรือ Command: whenever --update-crontab --set environment=development

Whenever Examples เพิ่มเติม

ตัวอย่าง Specific — Weekly Task:

 every :monday, at: "6:00 PM" do
  runner "Mail.send_weekly_newsletter"
end

รัน Task หลายครั้งในวัน — Twice a Day:

 every :day, at: ["12:00 AM", "12:00 PM"] do
  command "rm tmp/testing.txt"
end

Whenever Gem Logging & Troubleshooting

มี Tasks ใน Crontab (crontab -l) Ready — รู้ยังไงว่า Tasks ทำงานถูก?

Setup Logging อ่าน Output — Enable Logging ใส่บนสุด schedule.rb:

 set :output, "log/cron.log" 

記得 รัน whenever --update-crontab ทุกครั้งที่แก้!

Log ว่าง? รอ Scheduled Time — Btw Error นี้ใน Logs: /bin/bash: bundle: command not found = Cron รัน Ruby Version ต่างจากคุณ

用 Ruby Version Manager: โหลดจาก .bash_profile ไม่ใช่ .bashrc ให้ Cron Tasks ใช้ได้

Alternatives to Whenever

Whenever Maintained ใช้งานดี — แต Alternatives?

List:

  • Heroku Scheduler: Free Add-on สำหรับ Heroku Users ไม่ยืดหยุ่นเท่า Cron แตทำงานได้
  • Rufus Scheduler: Gem แทน Cron ด้วย In-Memory Scheduler
  • Sidecloq & Sidekiq-cron: Sidekiq Add-ons 加 Recurring Tasks ให้ Sidekiq

Sidekiq Addons อยาก Cron Syntax จริง — ไม่สวยเท่า Whenever — แต Integrate กับ Sidekiq Web UI

Summary (สรุป)

คุณเรียนรู้ Schedule Cron Jobs ด้วย Whenever Gem ใน Ruby!

Share บทความให้คนอื่นได้ประโยชน์ — ขอบคุณที่อ่านครับ