每当cronjobs不在分期运行时

时间:2016-06-29 17:24:51

标签: ruby-on-rails cron

我正在尝试创建一个运行此任务的简单cron作业: 这是我的schedule.rb:

set :environment, "staging"
set :path, "/var/www/my_app/current"
every 2.minutes do
  # specify the task name as a string
  rake 'cron_test'
end

这是任务:

task :cron_test => :environment do
  out_file=File.new("cron_test.txt", "w")
  out_file.puts(Time.now.to_s)
  out_file.close
end

我尝试按照此页面上的建议进行操作但没有任何效果: Cron job not working in Whenever gem

当我运行crontab -l:

# Begin Whenever generated tasks for: /var/www/my_app/current/config/schedule.rb
0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 * * * * /bin/bash -l -c 'cd /var/www/my_app/current && RAILS_ENV=staging bundle exec rake cron_test'

# End Whenever generated tasks for: /var/www/my_app/current/config/schedule.rb

当我运行grep CRON / var / log / syslog:

Jun 29 17:22:01 my_server CRON[21164]: (root) CMD (/bin/bash -l -c 'cd /var/www/my_app/current && RAILS_ENV=staging bundle exec rake cron_test')

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:0)

从控制台上的crontab手动运行命令会发生什么?尝试运行。看看是否有任何错误。

/bin/bash -l -c 'cd /var/www/my_app/current && RAILS_ENV=staging bundle exec rake cron_test'

可能是本地或cron环境的东西。日志也很棒,捕获任何运行错误。您可以设置输出日志以捕获运行该命令的crontab的任何问题。

  set :output, '/path/to/file.log'

为你举例:

set :output, '/var/log/my_app.cron.log'
set :environment, "staging"
set :path, "/var/www/my_app/current"
every 2.minutes do
  # specify the task name as a string
  rake 'cron_test'
end

Here's the documentation whenever output redirection

答案 1 :(得分:0)

谢谢它现在正在运作!

当我创建/var/log/staging_cron.log时,我读到了这个:

/bin/bash: bundle: command not found

我在schedule.rb的第一行添加了env :PATH, ENV['PATH'],更新了crontab(每当--update-crontab),现在我的测试文件已经很好地创建和更新了。