Работа Cron не работает в Gever Whenever - PullRequest
16 голосов
/ 26 сентября 2011

У меня есть приложение, которое содержит кучу задач, и каждый день я хочу запустить задание cron, которое создает DayTask для каждой задачи в базе данных. Задача has_many DayTasks, и эти ежедневные задачи - это то, что пользователи будут проверять каждый день. Я использую драгоценный камень всякий раз, когда он не работает. Есть идеи?

конфиг / schedule.rb

every 1.day, :at => "12:01am" do
  runner "Task.generate_tasks_for_day"  
end

Task.rb

  def generate_tasks_for_day
    Task.all.each do |task|
      task.day_tasks.create(:target_date => Date.today)
    end 
  end 

Результат выполнения команды «Every»

1 0 * * * /bin/bash -l -c 'cd /home/grant/rails_projects/GoalTwist && script/rails runner -e production '\''Task.generate_tasks_for_day'\'''

Примечание: я менял время в config / schedule.rb каждый раз, когда я хочу протестировать его.

Ответы [ 3 ]

66 голосов
/ 06 ноября 2012

Наконец я решил, как запустить драгоценный камень. Он работает хорошо на производстве, но не в режиме разработки (я думаю, что для хорошей работы в режиме разработки вы должны сделать несколько трюков).

Затем необходимо выполнить следующие процессы:

  1. установить драгоценный камень
  2. напишите свой scheduler.rb файл
  3. отправка на удаленный сервер
  4. вход на удаленный сервер (например, с помощью ssh)
  5. посмотреть, загружен ли каждый раз при запуске в терминале: whenever
  6. обновлять всякий раз при запуске crontab: whenever --update-crontab
  7. перезапустите сервер crontab (например, на сервере Ubuntu): sudo service cron restart
  8. проверить, хорошо ли реализован crontab на сервере: crontab -l

Вот и все!

Лично я предпочитаю устанавливать свои кроны прямо с сервера:

  1. Редактировать crontab: crontab -e
  2. Добавить мой cron (например, каждый день в 5:00 - может немного отличаться для сервера не на базе Linux):
    0 5 * * * /bin/bash -l -c 'cd /path_to_my_app/current && RAILS_ENV=production bundle exec rake my_cron_rake'
  3. Проверьте, правильно ли реализовано: crontab -l
  4. Готово
4 голосов
/ 19 января 2016

Вы действительно должны зарегистрировать задание в crontab, выполнив:

whenever --update-crontab

Также, если вы пытаетесь запустить задания локально, добавьте :environment => "development" в вашу задачу

runner "MyTask.some_action", :environment => "development"

0 голосов
/ 26 сентября 2011

Попробуйте выполнить сгенерированную команду непосредственно из терминала или добавьте следующую строку MAILTO=your@emailadress.com в ваш crontab.

...