我发现,无论什么时候添加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'路径。
我怀疑这不应该是必要的,但在尝试解决问题一段时间后,这就是我最终得到的结果。
是的,它应该覆盖它们。你能否提供一些可能帮助我们诊断问题的更多信息?你的'schedule.rb'中有什么? “crontab”中有什么?你有任何不寻常的部署代码?如果你清空'crontab'并在干净的系统上重新部署会发生什么? ....... –
schdule.rb定义了8个简单的条目,每天运行一次命令。例如'每隔一天做<一些ruby命令>结束' 我清除了crontab并触发了两次部署。它添加了两次cron条目。 – Sid
请编辑原文,并附实际代码。 (如果它包含敏感信息,只要意义没有丢失,就可以使用伪数据进行编辑。) –