我正在尝试创建一个运行此任务的简单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')
有什么想法吗?
由于
答案 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
答案 1 :(得分:0)
谢谢它现在正在运作!
当我创建/var/log/staging_cron.log时,我读到了这个:
/bin/bash: bundle: command not found
我在schedule.rb的第一行添加了env :PATH, ENV['PATH']
,更新了crontab(每当--update-crontab),现在我的测试文件已经很好地创建和更新了。