Computer >> Máy Tính >  >> Lập trình >> Ruby

Làm thế nào để lên lịch công việc Cron trong Ruby với bất cứ khi nào đá quý

Cron là gì?

Cron là một hệ thống lập lịch công việc có sẵn trong hệ điều hành Linux và MacOS.

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.

Điều này bao gồm mã Ruby!

Nếu có một nhiệm vụ định kỳ cụ thể mà bạn muốn chạy tự động hàng ngày, hàng tuần hoặc thậm chí hàng giờ, thì Cron có thể là thứ bạn đang tìm kiếm.

Ví dụ về các nhiệm vụ bao gồm :

  • 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ở

Hãy cùng khám phá cách bạn có thể làm cho cron phù hợp với mình!

Khái niệm cơ bản về Cron

Mọi người dùng đều có thể có một tệp cron nơi bạn xác định các tác vụ bạn muốn chạy.

Bạn có thể chỉnh sửa tệp này bằng crontab -e lệnh.

Hoặc liệt kê các công việc đã lên lịch với crontab -l .

Ví dụ về cron job :

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

Cú pháp có thể hơi phức tạp và bạn có thể không muốn chỉnh sửa các tệp này bằng tay mọi lúc.

Có viên ngọc nào giúp chúng ta làm mọi thứ dễ dàng hơn không?

Vâng!

Cách sử dụng viên ngọc bất cứ khi nào

Vì cú pháp cron có thể khó nhớ nên chúng ta có thể sử dụng một gem như whenever .

Đá quý này giúp bạn xác định các công việc cron trong Ruby .

Cài đặt đá quý trước.

Sau đó, tạo tệp cấu hình :

wheneverize .
# [add] config/schedule.rb

Mở nó ra.

Bạn sẽ thấy một số ví dụ đã nhận xét, hãy xóa chúng nếu bạn muốn.

Giả sử chúng tôi muốn một công việc sao lưu chạy hàng giờ.

Viết nội dung này bên trong tệp “config / calendar.rb” :

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

Các tùy chọn bao gồm :

  • rake (bắt đầu tác vụ rake được xác định trên dự án hiện tại của bạn, lưu ý rằng db:backup không được xác định theo mặc định, nhưng bạn có thể thử db:version )
  • runner (lớp Ruby + phương thức, như Archive.backup_now )
  • lệnh (lệnh hệ thống)

Bây giờ :

Chạy whenever --update-crontab lệnh để tạo các mục cron.

Bạn có thể xem mục nhập mới của mình bằng crontab -l .

Đây là những gì tôi nhận được :

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

Lưu ý rằng tác vụ sẽ chạy trong production chế độ.

Bạn muốn thay đổi điều đó?

Bạn có thể sử dụng cài đặt này :

set :environment, "development"

Điều này có trong schedule.rb của bạn ở trên cùng.

Bạn cũng có thể sử dụng lệnh này :

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

Điều này tạo ra tất cả các tác vụ với "phát triển" làm môi trường khi bạn chạy lệnh này.

Thêm bất cứ khi nào Ví dụ

Ví dụ này cho thấy cách bạn có thể cụ thể hơn.

Nhiệm vụ hàng tuần :

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

Ví dụ này cho thấy cách chạy cùng một tác vụ nhiều lần trong ngày.

Chạy tác vụ hai lần một ngày :

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

Bất cứ khi nào Ghi nhật ký Gem &Khắc phục sự cố

Sau khi bạn có các tác vụ trong tệp crontab của mình (kiểm tra bằng crontab -l ) bạn đã sẵn sàng.

Tiếp theo:

Làm cách nào để biết liệu các tác vụ đã lên lịch có hoạt động chính xác hay không?

Bạn có thể thiết lập ghi nhật ký và đọc kết quả.

Bật ghi nhật ký bằng cách thêm cái này vào đầu schedule.rb của bạn tệp.

Cấu hình :

set :output, "log/cron.log"

Hãy nhớ chạy whenever --update-crontab ra lệnh mỗi khi bạn thực hiện thay đổi!

Tệp nhật ký vẫn trống?

Bạn sẽ phải đợi thời gian đã lên lịch để xem điều gì đó xảy ra.

Btw, nếu bạn thấy lỗi này trong nhật ký :

/bin/bash: bundle: command not found

Điều đó có nghĩa là cron không chạy cùng một phiên bản Ruby của bạn.

Nếu bạn đang sử dụng trình quản lý phiên bản Ruby :

Đảm bảo tải nó từ .bash_profile thay vì .bashrc , vì vậy các tác vụ cron của bạn có thể sử dụng nó.

Lựa chọn thay thế cho Bất cứ khi nào

Bất cứ khi nào là một viên ngọc được bảo quản tốt và nó hoạt động tốt.

Nhưng các lựa chọn thay thế là gì?

Đây là danh sách :

  • Heroku Scheduler, đây là tiện ích bổ sung lập lịch công việc miễn phí cho người dùng Heroku. Không linh hoạt như cron nhưng nó hoàn thành công việc
  • Rufus Scheduler, một viên ngọc Ruby thay thế cron bằng một bộ lập lịch trong bộ nhớ
  • Sidecloq &Sidekiq-cron, cả hai đều là các tiện ích bổ sung Sidekiq giúp thêm các tác vụ lặp lại vào Sidekiq

Lưu ý rằng cả hai phần bổ trợ Sidekiq đều muốn cú pháp cron thực tế để lập lịch, vì vậy nó sẽ không đẹp như bất cứ khi nào cú pháp.

Điều tốt là chúng tích hợp với giao diện người dùng web Sidekiq.

Tóm tắt

Bạn đã học cách lên lịch công việc cron bằng cách sử dụng gem bất cứ khi nào trong Ruby!

Hãy chia sẻ bài viết này để nhiều người có thể được hưởng lợi từ nó.

Cảm ơn vì đã đọc.