2014-01-02 2 views
0

У меня есть rake задачу в моем приложении Rails, и когда я выполнить заказ в моих рельсах приложение путь /home/hxh/Share/ruby/sport/:кронтаб не работает в Rails разгребать задачу

rake get_sportdata 

Это будет работать нормально.

Теперь я хочу использовать crontab, чтобы сделать это rake быть timed task .so, я добавляю задачу:

* * * * * cd /home/hxh/Share/ruby/sport && /usr/local/bin/rake get_sportdata >/dev/null 2>&1 

Но это не work.I получить журнал в cron.log файле:

Job `cron.daily' terminated 

Я хочу знать, где ошибка.

+0

Удаление '>/dev/null 2> & 1' может помочь вам что-то увидеть. –

+0

Если я удалю это, я ничего не вижу об ошибке. – HXH

ответ

1

ли "кд/дом/HXH/Share/рубин/спорт & &/USR/местные/бен/Грабли get_sportdata>/DEV/нуль 2> & 1" может работать в терминале?

Но использование crontab в Rails обычно не является хорошей идеей. Каждый раз он будет загружать среду Rails и замедлять вашу производительность.

Я думаю, whenever или rufus-scheduler все хорошо. Например, использовать rufus-scheduler очень просто. В конфигурации \ Инициализаторы \ schedule_task.rb

require 'rubygems' 
require 'rufus/scheduler' 


scheduler = Rufus::Scheduler.start_new(:thread_name => "Check Resources Health") 
scheduler.every '1d', :first_at => Time.now do |job| 
    puts "###########RM Schedule Job - Check Resources Health: #{job.job_id}##########" 
    begin 
    HealthChecker.perform 
    rescue Exception => e 
    puts e.message 
    puts e.backtrace 
    raise "Error in RM Scheduler - Check Resources Health " + e.message 
    end 
end 

и реализации «выполнить» или какой-либо другой метод класса в контроллере, теперь контроллер «HealthChecker». Очень легко и без особых усилий. Надеюсь, это поможет.

1

Так что вы можете испытать лучше, и получить ручку на работает ли я предложить:

  1. Написать скрипт в [app root]/script который устанавливает правильные переменные окружения, чтобы указать на Ruby (при необходимости) и имеет звонок rake. Например, что-то вроде script/get-sportdata.sh.
  2. Проверьте скрипт как root. Например, сначала сделайте sudo -s.
  3. Позвоните по этому сценарию из cron. Например, * cd [...] && script/get-sportdata.sh. Если необходимо, проверьте эту строку как root.

Это был мой рецепт успеха, запуск рейк-задач из cron на Ubuntu. Это связано с тем, что среда cron немного отличается от обычной настройки оболочки. И поэтому ограничение ваших фактических заданий cron на простые команды для запуска конкретного скрипта - хороший способ разделить конфигурацию на более мелкие части, которые могут быть индивидуально протестированы.

Смежные вопросы