+1

Tạo một cron job với Ruby bằng gem Whenever

I. Cron job là gì ?

Cron job là một chức năng để thực thi định kì một lệnh nào đó trong một khoảng thời gian đã được xác định từ trước.
Nó có thể được sử dụng để chạy bất kỳ chương trình nào tại bất kỳ thời điểm nào. Nếu có một công việc định kỳ cụ thể nào đó mà bạn muốn tự động chạy hàng ngày, hàng tuần hoặc thậm chí hàng giờ, thì Cron job có thể là thứ bạn đang tìm kiếm.

Ví dụ về một số công việc hay sử dụng crob :

  • Chạy sao lưu cơ sở dữ liệu hàng tuần
  • Tạo báo cáo hàng ngày về hoạt động của trang web
  • Gửi email nhắc nhở

II. Sử dụng cronjob trong Ruby on Rails bằng gem whenever

1. Cài đặt

  • Cài đặt gem whenever
  gem install whenever

Hoặc bạn có thể bỏ vào thêm câu lệnh nào vào Gemfile:

    gem 'whenever', require: false

Sau đó chạy bundle install.

2. Cách sử dụng

Để tạo cronjob đầu tiên bạn tạo file schedule.rb trong thư mục config/schedule.rb Cách đơn giản để tạo ra file này là

bundle exec whenever

Mở files schedule.rb ra.

Bạn sẽ thấy một số ví dụ đã được comment lại

    # Use this file to easily define all of your cron jobs.
    #
    # It's helpful, but not entirely necessary to understand cron before proceeding.
    # http://en.wikipedia.org/wiki/Cron

    # Example:
    #
    # set :output, "/path/to/my/cron_log.log"
    #
    # every 2.hours do
    #   command "/usr/bin/some_great_command"
    #   runner "MyModel.some_method"
    #   rake "some:great:rake:task"
    # end
    #
    # every 4.days do
    #   runner "AnotherModel.prune_old_records"
    # end

    # Learn more: http://github.com/javan/whenever

Example

Giả sử chúng ta muốn mỗi giờ sẽ chạy một lên thông báo là bây giờ là mấy giờ thì ta làm như sau:

Viết code này bên trong tệp “config / Schedule.rb”:

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

Ở trên mình là ví dụ dùng với lệnh rake, có các option khác như sau :

  • rake (bắt đầu tác vụ rake được xác định trên dự án hiện tại của bạn)
  • runner (lớp Ruby + phương thức)
  • command (lệnh hệ thống)

Sau đó: Chạy lệnh whenever --update-crontab để tạo các mục cron. Bạn sẽ có thể list các cron mình vừa tạo bằng cách crontab -l.

Sau khi chạy lên trên bạn sẽ thấy như sau:

* * * * * /bin/bash -l -c 'cd /home/do.huy.thanh/blueocean-server && RAILS_ENV=production bundle exec rake puts 2021-05-14 16:36:58 +0700 --silent'

Bạn sẽ nhận ra là câu lệnh trên nó sẽ chỉ chạy trên production (RAILS_ENV=production) Nếu bạn muốn chạy trên môi trường dev Bạn có thể sử dụng cài đặt này:

set :environment, "development"

Bạn sẽ viết đoạn này trong file schedule.rb, ở trên top của file

Hoặc bạn cũng có thể dùng lệnh này

whenever --update-crontab --set environment=development

Câu lệnh trên tạo ra các cron chạy trên môi trường development

  • Làm thế nào để bạn biết cron job của bạn đã hoạt động đúng Bạn có thể cài logging và đọc chúng

Bật logging bằng cách add dòng sau vào trên đầu file schedule.rb

set :output, "log/cron.log"

Bạn sẽ đợi đến khi cron thực thi và có thể xem thông tin của nó trong file log/cron.log

Kết luận

Bạn đã học cách tạo một cron job để thực hiện công việc bằng gem Whenever trong Ruby! Cảm ơn vì đã đọc.

Tài liệu tham khảo


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí