Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Lập Lịch Cron Job Trong Ruby Dùng Gem Whenever – Hướng Dẫn Bước Đi Bước

Cron Là Gì?

Cron là hệ thống lập lịch job có sẵn Linux & MacOS. Chạy bất kỳ chương trình nào tại thời điểm cho trước. Bao gồm code Ruby! Nếu có task định kỳ muốn chạy tự động mỗi ngày, tuần hoặc giờ, Cron có thể là thứ bạn cần. Ví dụ task: Backup DB hàng tuần, tạo báo cáo hoạt động web hàng ngày, gửi email nhắc nhở.

Hãy khám phá làm cron work cho bạn!

Cơ Bản Của Cron

Mỗi user có file cron định nghĩa task muốn chạy. Edit file với crontab -e. Liệt kê task với crontab -l. Ví dụ cron job:

 0 0 * * * /opt/rubies/ruby-2.5.1/bin/rake db:backup 
Cú pháp hơi tricky & có thể không muốn edit thủ công luôn. Có gem làm dễ dàng? Có!

Cách Dùng Gem Whenever

Vì cron syntax khó nhớ, dùng gem whenever. Gem giúp định nghĩa cron job bằng Ruby. Cài gem trước. Sau đó, tạo file config: wheneverize . # [add] config/schedule.rb. Mở lên. Thấy ví dụ commented, xóa nếu muốn. Giả sử muốn backup job chạy mỗi giờ. Viết trong "config/schedule.rb":

 every 1.hour do
  rake "db:backup"
end 
Options:
  • rake (chạy rake task project, db:backup không default, thử db:version)
  • runner (Ruby class + method, như Archive.backup_now)
  • command (system command)
Bây giờ: Chạy whenever --update-crontab generate cron entry. Xem entry mới với crontab -l. Kết quả:
 0 * * * * /bin/bash -l -c 'cd /home/jesus/testing && RAILS_ENV=production bundle exec rake db:backup --silent' 
Chú ý task chạy mode production. Muốn đổi? Dùng setting: set :environment, "development" trong schedule.rb đầu file. Hoặc command: whenever --update-crontab --set environment=development. Tạo task với environment "development" khi chạy command.

Thêm Ví Dụ Whenever

Ví dụ cụ thể hơn. Task hàng tuần:

 every :monday, at: "6:00 PM" do
  runner "Mail.send_weekly_newsletter"
end 
Chạy task 2 lần/ngày:
 every :day, at: ["12:00 AM", "12:00 PM"] do
  command "rm tmp/testing.txt"
end 

Logging & Troubleshooting Whenever

Đã có task trong crontab (check crontab -l) sẵn sàng. Làm sao biết task chạy đúng? Setup logging & đọc output. Enable log thêm đầu schedule.rb. Config: set :output, "log/cron.log". Nhớ chạy whenever --update-crontab mỗi lần đổi! Log file vẫn rỗng? Đợi đến giờ scheduled. Nếu thấy error log:

 /bin/bash: bundle: command not found 
Nghĩa cron không chạy Ruby version giống bạn. Nếu dùng Ruby version manager: Load từ .bash_profile thay .bashrc, để cron task dùng được.

Alternative Cho Whenever

Whenever maintained tốt & work great. Nhưng alternative? Danh sách:

  • Heroku Scheduler, free add-on Heroku user. Không flexible như cron nhưng làm việc
  • Rufus Scheduler, gem Ruby thay cron bằng in-memory scheduler
  • Sidecloq & Sidekiq-cron, cả hai add-on Sidekiq thêm recurring task vào Sidekiq
Lưu ý Sidekiq addons muốn cron syntax thực tế cho scheduling, nên không đẹp như whenever syntax. Ưu điểm: integrate với Sidekiq web UI.

Tóm Tắt

Bạn đã học lập lịch cron job dùng gem whenever trong Ruby! Hãy chia sẻ để nhiều người hưởng lợi. Cảm ơn bạn đã đọc.