Как обновить cron на основе datetime в БД - PullRequest
0 голосов
/ 17 января 2012

Хорошо, поэтому я направляю приложение с базой данных mysql, которая имеет поле с именем end_date в таблице заказов. Это поле управляется администратором. Мне нужен cronjob, который запускается за 2 недели до поля end_date. Есть идеи, как это сделать. Я также использую камень всякий раз

every 1.day, :at => '12:30 am' do 
  runner "Order.task_that_checks_date"
end

Моей первой мыслью было запускать работу cron ежедневно и проверять это значение, но я ненавижу запускать cron каждый день, если мне нужно запускать cron раз в год. Любые идеи о том, как улучшить это

1 Ответ

1 голос
/ 18 января 2012

Самым плавным решением этой проблемы, о котором я могу подумать, было бы иметь дату "next_cron" где-нибудь в приложении и обновлять ее с помощью after_save ловушки. Логика заключалась бы в том, чтобы найти самую короткую дату окончания в приложении и установить дату «next_cron» за две недели до этого. Крон либо вообще не запускается до этой даты, либо время от времени проверяет, является ли сегодня день next_cron, и либо выполняет свою задачу, либо завершает работу.

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

...