2016-07-15 89 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'路徑。

我懷疑這不應該是必要的,但在嘗試解決問題一段時間後,這就是我最終得到的結果。