2016-07-15 92 views
1

我使用:Rails的Capistrano的 - 每当追加的Cron cron作业,每部署

Ruby  1.9.3 
whenever 0.9.4 
Rails 3.2 
and capistrano/whenever extension. 

每当部署情况,它增加了条目每个部署后的crontab文件。由于5次部署,因此在crontab -l中有40个条目,因为schedule.rb有8个cron条目。对于每个版本都有不同的条目。它不应该默认覆盖条目?

它重新创建schedule.rb文件中提到的条目。

+0

是的,它应该覆盖它们。你能否提供一些可能帮助我们诊断问题的更多信息?你的'schedule.rb'中有什么? “crontab”中有什么?你有任何不寻常的部署代码?如果你清空'crontab'并在干净的系统上重新部署会发生什么? ....... –

+0

schdule.rb定义了8个简单的条目,每天运行一次命令。例如'每隔一天做<一些ruby命令>结束' 我清除了crontab并触发了两次部署。它添加了两次cron条目。 – Sid

+0

请编辑原文,并附实际代码。 (如果它包含敏感信息,只要意义没有丢失,就可以使用伪数据进行编辑。) –

回答

1

我发现,无论什么时候添加cron作业crontab文件,由包含路径Capistrano的注释行分隔每个cron作业释放目录......是这样的:

# Begin Whenever generated tasks for: /home/path/www/to/releases/2070527160502/config/schedule.rb 

(您可以用crontab -e查看原始crontab文件,以查看每次放入该文件后的内容)

当发生下一次部署时,每当看到是否有以注释分隔的cron作业,但使用新的版本号。它没有发现,所以它将新作业追加到crontab文件。

我对这个问题的解决方法是指定update_crontab任务deploy.rb与明确的路径schedule.rb这样的:

namespace :deploy do 
task :update_crontab do 
    on roles(:all) do 
    within current_path do 
     execute :bundle, :exec, :whenever, "--update-crontab", "~/path/to/current/config/schedule.rb" 
     end 
    end 
    end 
end 
after 'deploy:symlink:release', 'deploy:update_crontab' 

所以在crontab文件注释分隔符包含“当前”路径而不是'releases/nnnnnnnnnnn'路径。

我怀疑这不应该是必要的,但在尝试解决问题一段时间后,这就是我最终得到的结果。