Gem Whenever
Whenever là một Ruby Gem cung cấp cú pháp rõ ràng cho việc viết và deploy các cron job. Cài đặt $ gem install whenever Hoặc thêm vào Gemfile rồi bundle install: gem 'whenever' , :require = > false Sử dụng $ cd / apps / my - great - project $ wheneverize . Lệnh ...
Whenever là một Ruby Gem cung cấp cú pháp rõ ràng cho việc viết và deploy các cron job.
Cài đặt
$ gem install whenever
Hoặc thêm vào Gemfile rồi bundle install:
gem 'whenever', :require => false
Sử dụng
$ cd /apps/my-great-project $ wheneverize .
Lệnh trên sẽ tạo ra một file config/schedule.rb.
Whenever command
$ cd /apps/my-great-project $ whenever
Lệnh này đơn giản là convert file schedule.rb thành cú pháp cron. Nó không đọc hoặc viết vào file crontab, bạn cần thực hiện lệnh sau:
$ whenever --update-crontab
Một số lựa chọn khác thường được sử dụng:
$ whenever --user app # set a user as which to install the crontab $ whenever --load-file config/my_schedule.rb # set the schedule file $ whenever --crontab-command 'sudo crontab` # override the crontab command
Bạn có thể liệt kê các cron job đã được cài đặt bằng cách dùng: crontab -l.
Chạy whenever --help sẽ cho ra một danh sách đầy đủ các tùy chọn cho việc chọn schedule để dùng, cài đặt các biến trong schedule, ...
Ví dụ file schedule.rb
every 3.hours do # 1.minute 1.day 1.week 1.month 1.year is also supported 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 # Many shortcuts available: :hour, :day, :month, :year, :reboot runner "SomeModel.ladeeda" end every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday runner "Task.do_something_great" end every '0 0 27-31 * *' do command "echo 'you can use raw cron syntax too'" end # run this task only on servers with the :app role in Capistrano # see Capistrano roles section below every :day, :at => '12:20am', :roles => [:app] do rake "app_server:task" end
Xác định loại job
Whenever cung cấp ba loại job: command, runner, và rake. Bạn có thể xác định các job_type của mình.
Ví dụ:
job_type :awesome, '/usr/local/bin/awesome :task :fun_level' every 2.hours do awesome "party", :fun_level => "extreme" end
Lệnh trên sẽ chạy /usr/local/bin/awesome party extreme cứ hai giờ một lần. :task luôn luôn được thay thế bằng đối số đầu tiên, tiếp tục với các đối số tương ứng.
Các loại job_type mặc định được cung cấp bởi Whenever được định nghĩa như sau:
job_type :command, ":task :output" job_type :rake, "cd :path && :environment_variable=:environment bundle exec rake :task --silent :output" job_type :runner, "cd :path && bin/rails runner -e :environment ':task' :output" job_type :script, "cd :path && :environment_variable=:environment bundle exec script/:task :output"
Nếu :path không được thiết lập, nó sẽ mặc định đường dẫn mà lệnh whenever đang thực thi. :environment_variable mặc định là RAILS_ENV. :environment mặc định là production. :output sẽ được thay thế với ouput redirection của bạn, co thể đọc thêm ở link : http://github.com/javan/whenever/wiki/Output-redirection-aka-logging-your-cron-jobs
Tất cả các job được mặc định chạy với bash -l -c 'command...'. Đọc thêm: http://blog.scoutapp.com/articles/2010/09/07/rvm-and-cron-in-production
Bạn có thể thay đổi điều này bằng cách cài đặt :job_template:
set :job_template, "bash -l -c ':job'"
Hoặc thiết lập job_template bằng nil để job của bạn được thực thi bình thường.
set :job_template, nil
Phân tích date và time
Whenever dùng gem Chronic để phân tích các date và time đặc biệt.
Bạn có thể thiết lập các tùy chọn của config Chronic nếu các mặc định không phù hợp.
Ví dụ, bạn muốn dùng đồng hồ 24 giờ thay thế cho loại mặc định là 12 giờ:
set :chronic_options, :hours24 => true # By default this would run the job every day at 3pm every 1.day, :at => '3:00' do runner "MyModel.nightly_archive_job" end
Bạn có thể xem danh sách các tùy chọn ở link sau:
https://github.com/mojombo/chronic/blob/master/lib/chronic/parser.rb
Tùy chỉnh người nhận email với biến môi trường MAILTO
Output từ các job được gửi tới địa chỉ email cài đặt trong biến môi trường MAILTO.
Có nhiều cách để thiết lập người nhận:
Ví dụ: Thiết lập MAILTO cho toàn bộ job:
env 'MAILTO', 'output_of_cron@example.com' every 3.hours do command "/usr/bin/my_great_command" end
Ví dụ: Thiết lập MAILTO cho tất cả job trong cùng một bl:
every 3.hours, mailto: 'my_super_command@example.com' do command "/usr/bin/my_super_command" end
Ví dụ: Một MAILTO thiết lập cho job riêng
every 3.hours do command "/usr/bin/my_super_command", mailto: 'my_super_command_output@example.com' end
Bài viết trên giới thiệu cơ bản về gem Whenever vói các tùy chọn dùng để deploy các cron tab. Bạn có thể nghiên cứu thêm ở tài liệu phía dưới.
Thank you!
Tài liệu dịch: https://github.com/javan/whenever