如何在同一台服务器的多个环境中运行相同的cronjob?

时间:2018-02-27 11:41:14

标签: ruby-on-rails ruby-on-rails-4 capistrano whenever

我使用过Rails 5,Capistrano Gem和Whenever Gem。我有一台有多种环境的服务器。

当我通过capistrano更新服务器上的cronjob时,它会覆盖它在多个环境中运行cronjob的地方。

实施例: 当我在服务器上 crontab -l <​​/ strong>命令检查时

我看到了

# Begin Whenever generated tasks for: /home/bhargav/sites/tenpo_api_mdsql/releases/20180227112937/config/schedule.rb at: 2018-02-27 20:30:24 +0900
0 16 * * * /bin/bash -l -c 'cd /home/bhargav/sites/tenpo_api_mdsql/releases/20180227112937 && bundle exec bin/rails runner -e production '\''TDayTenAsnSiireJissekiHeader.asn_siire_jidou_chakka'\'' >> log/cron_log.log 2>> log/cron_error_log.log'

# End Whenever generated tasks for: /home/bhargav/sites/tenpo_api_mdsql/releases/20180227112937/config/schedule.rb at: 2018-02-27 20:30:24 +0900

OR

# Begin Whenever generated tasks for: /home/bhargav/staging-sites/tenpo_api_mdsql/releases/20180227112656/config/schedule.rb at: 2018-02-27 20:27:33 +0900
0 16 * * * /bin/bash -l -c 'cd /home/bhargav/staging-sites/tenpo_api_mdsql/releases/20180227112656 && bundle exec bin/rails runner -e development '\''TDayTenAsnSiireJissekiHeader.asn_siire_jidou_chakka'\'' >> log/cron_log.log 2>> log/cron_error_log.log'

# End Whenever generated tasks for: /home/bhargav/staging-sites/tenpo_api_mdsql/releases/20180227112656/config/schedule.rb at: 2018-02-27 20:27:33 +0900

2 个答案:

答案 0 :(得分:0)

在schedule.rb文件中, 添加以下行仅在生产中使用

set :environment, :production

或者您可以指定不同的环境来运行不同的crons,如下所示

if Rails.env.production?
  every 1.day, :at => '12.00 am' do
    runner 'Name.update'
  end
end

答案 1 :(得分:0)

我通过以下代码解决了这个问题。

如果您的环境位于您想要命名它们的同一服务器上,或者在部署时它们会相互覆盖,则会出现此问题:

  

如果Capistrano V2

     

设置:never_identifier,推迟{&#34;#{application} _#{stage}&#34; }

     

如果Capistrano V3

     

设置:never_environment, - &gt; {&#34;#{fetch(:stage)}&#34; }