crontabの内容を管理するgem whenever の使い方を復習した
DSLっぽいrubyを使ってcrontabの内容を管理するgem whenever の使い方を復習しました。
本家GitHub https://github.com/javan/whenever
# Gemfile gem 'whenever', '= 0.9.4', :require => false
$ wheneverize . # [add] writing `./config/schedule.rb' [done] wheneverized!
# config/schedule.rb # everyの引数に、時間と実行させたいtaskの内容を書いたブロックを渡す every 1.minutes do # job_type :rake, "cd :path && :environment_variable=:environment bundle exec rake :task --silent :output" rake "example" # lib/tasksあたりに置いているタスクだよ end every 1.minutes do # job_type :runner, "cd :path && bin/rails runner -e :environment ':task' :output" runner "Sample.test" # モデルに書いたメソッドだよ end
$ whenever # オプション無しだとshcedule.rbを元に生成されるcrontabの内容が表示される * * * * * /bin/bash -l -c 'cd /Users/woshidan/projects/wheneverize-ex && RAILS_ENV=production bundle exec rake example --silent' * * * * * /bin/bash -l -c 'cd /Users/woshidan/projects/wheneverize-ex && bin/rails runner -e production '\''Sample.test'\''' ## [message] Above is your schedule file converted to cron syntax; your crontab file was not updated. ## [message] Run `whenever --help' for more options. You have mail in /var/mail/woshidan $ whenever --update-crontab [write] crontab file updated $ crontab -e # crontabの内容が更新される # Begin Whenever generated tasks for: /Users/woshidan/projects/wheneverize-ex/config/schedule.rb * * * * * /bin/bash -l -c 'cd /Users/woshidan/projects/wheneverize-ex && RAILS_ENV=production bundle exec rake example --silent' * * * * * /bin/bash -l -c 'cd /Users/woshidan/projects/wheneverize-ex && bin/rails runner -e production '\''Sample.test'\''' # End Whenever generated tasks for: /Users/woshidan/projects/wheneverize-ex/config/schedule.rb
テスト用タスクの中身。
# lib/tasks/example.rb task example: :environment do Rails.logger.info "example: #{Time.current}" end # app/models/sample.rb class Sample def self.test Rails.logger.warn "test: #{Time.current}" end end
久しぶりにさわるgemはうろ覚えで書いてはいけない...肝に銘じましたし...。