Работа в Cron не работает. Всякий раз, когда драгоценный камень

У меня есть приложение, содержащее множество задач, и каждый день я хочу запустить задание 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 

результат запуска команды "всякий раз"

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 каждый раз, когда я хочу протестировать его.

Ответ 1

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

Затем это следующие процессы:

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

Что это!

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

  • Отредактируйте crontab: crontab -e
  • Добавить мой 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'
  • Проверьте, выполнено ли хорошее: crontab -l
  • Готово

Ответ 2

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

whenever --update-crontab

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

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

Ответ 3

Попробуйте выполнить команду сгенерированную командой непосредственно с терминала или добавить следующую строку [email protected] к вашему кронтабу.