问题描述
我使用 gem whenever
通过 Rails 6.0 应用管理 cron 任务。部署期间调用管理 Cron 任务的 rake 任务,但部署后 crontab 计划为空。
config/schedule.rb
require 'active_support/core_ext/object/blank.rb'
env :PATH,ENV['PATH']
set :output,"log/cron_log.log"
set :runner_command,"rails runner"
set :chronic_options,hours24: true
every 1.day,at: ['5:01','11:01','17:01','23:01'] do
runner "Task1"
end
every 1.hours do
runner "Task2"
end
我在 lib/tasks/start.rake
中创建了一个 rake 任务
desc 'launch cron task'
task :start_whenever do
puts 'rake start_whenever'
sh 'whenever'
sh 'bundle exec whenever --update-crontab'
puts **'cron activate'**
end
当我在部署后手动启动 rake 任务时 bundle exec rake start_whenever
,它完美地工作
但我希望在每次部署后自动运行此任务。所以我尝试了两种解决方案:
首先,按照我的托管服务的建议,我在配置文件中调用了 rack 任务。
https://www.clever-cloud.com/doc/getting-started/by-language/ruby/ smartcloud/ruby.json
{
"deploy": {
"rakegoals": ["assets:precompile","db:migrate","start_whenever"]
}
}
第二,我从迁移中调用 raketask
class LaunchWhenever < ActiveRecord::Migration[6.0]
def change
Rake::Task['start_whenever'].invoke
end
end
两个结果是一样的。在部署期间调用了 rake 任务 start_whenever
,但未设置 crontab。
## [message] Above is your schedule file converted to cron Syntax; your crontab file was not updated.
2021-07-12T09:00:57.352Z: ## [message] Run `whenever --help' for more options.
2021-07-12T09:00:57.352Z: bundle exec whenever --update-crontab
2021-07-12T09:00:57.353Z: [write] crontab file updated
2021-07-12T09:00:57.353Z: **cron activate**
2021-07-12T09:00:57.353Z: Creating build cache archive
2021-07-12T09:01:00.700Z: build cache archive successfully created
2021-07-12T09:01:00.700Z: **No cron to setuP**
命令行 crontab -l
给出 no crontab for bas
感谢您的帮助!
环境
Rails version 6.0.3.4
Ruby version ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]
RubyGems version 3.0.3
Rack version 2.2.3
JavaScript Runtime Node.js (V8)
解决方法
gem whenever
将无法更新 crontab 本身。您应该使用 Clever Cloud 的 CRON 系统定期执行您的 rake 任务。
我在 Clever Cloud 工作。