【问题标题】:Whenever cron doesn't trigger backup每当 cron 不触发备份时
【发布时间】:2014-01-11 08:21:59
【问题描述】:

我正在尝试将自动备份机制集​​成到 Rails 应用程序并决定使用backup gem。备份文件有效并且手动成功运行,但是当我将它部署在 VPS 上时,它根本没有由 cron 运行。甚至日志文件也是空的。

schedule.rb:

every :day, :at => '2:00 am' do
  command "backup perform --trigger database_backup --config_file config/backup.rb --log-path log --tmp-path tmp",
          :output => {:error => 'log/cron_backup_error.log', :standard => 'log/cron_backup.log'}
end

crontab -l 命令结果:

0 2 * * * /bin/bash -l -c 'backup perform --trigger database_backup --config_file config/backup.rb --log-path log --tmp-path tmp >> log/cron_backup.log 2>> log/cron_backup_error.log'

如果我在 VPS 上手动运行这 2 个命令中的任何一个,它都会工作,但它们不能通过 cron 工作。所有其他计划任务也运行良好。

感谢您提供的任何帮助!

【问题讨论】:

  • 它是环境变量,Bash 可能对 ruby​​ 路径一无所知,因此您可能需要将 ruby​​ 路径添加到 crontab 文件的顶部,如果您使用 rvm 和 @ 就可以轻松实现987654326@

标签: ruby-on-rails ruby whenever


【解决方案1】:
  1. 尝试使用此配置:

    job_type :backup, "cd :path && bundle exec backup perform -t database_backup -c config/backup/config.rb -l tmp/backup/log -d tmp/backup/data --tmp-path=tmp/backup/tmp --cache-path=tmp/backup/cache"
    
    every :day, :at => '2:00 am' do
      backup ""
    end
    

    如果你使用 rvm:

    job_type :backup, "cd :path && rvm 1.9.3 do bundle exec backup perform -t database_backup -c config/backup/config.rb -l tmp/backup/log -d tmp/backup/data --tmp-path=tmp/backup/tmp --cache-path=tmp/backup/cache"
    

    追赶:

    $ whenever -w
    
  2. 试试 gem backup-rails

【讨论】:

    【解决方案2】:

    将此添加到 schedule.rb 的顶部

    env :PATH, ENV['PATH']
    

    这将确保 cron 的路径与您当前的路径相同

    【讨论】:

      【解决方案3】:

      您如何在服务器上运行以更新 crontab?您是否使用 Capistrano 进行部署?

      如果您使用 Capistrano,您的 deploy.rb 中应该有类似的内容:

      set :whenever_command, "bundle exec whenever"
      require "whenever/capistrano"
      

      如果您手动执行此操作,请确保通过捆绑程序运行它:

      bundle exec whenever ...
      

      您应该将环境变量设置为工作时的一部分:

      whenever --update-crontab app_name --set environment=production
      

      或者,您也可以在任何脚本中执行此操作:

      set :environment, 'production'
      

      或每个工作:

      every :day, :at => '2:00 am' do
        command "...", :output => { args_removed }, :environment => 'production' 
      end  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 2023-04-06
        • 1970-01-01
        • 2017-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多