3

我在用:

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

每当部署发生时,它都会在每次部署后将条目添加到 crontab 文件中。由于 5 次部署, 中有 40 个条目crontab -l,因为 schedule.rb 有 8 个 cron 条目。每个版本都有不同的条目。它不应该默认覆盖条目吗?

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

4

2 回答 2

4

我发现每当向 crontab 文件中添加一个 cron 作业时,每个 cron 作业都由一个注释行分隔,该注释行包含 capistrano 发布目录的路径......就像这样:

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

(你可以用 crontab -e 查看原始的 crontab 文件,看看里面放了什么)

当下一次部署发生时,无论何时查看是否有注释分隔的 cron 作业,但使用的版本号。它没有找到,因此它将新作业附加到 crontab 文件中。

我解决此问题的方法是在 deploy.rb 中指定 update_crontab 任务,并使用 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 文件中的注释分隔符包含“当前”路径,而不是“发布/nnnnnnnnnn”路径。

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

于 2017-05-27T16:45:06.440 回答
1

检查您是否正在设置

set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }

如果不这样做,它将选择默认标识符,即 config/schedule.rb 文件的扩展路径。

https://github.com/javan/whenever/blob/6e69dd8a6b3e2a8f4b2911b4efa5aab65cdc9dcb/lib/whenever/command_line.rb#L51

File.expand_path(@options[:file])
于 2018-12-07T13:22:33.833 回答