Фоновая обработка в rails
-
26-09-2019 - |
Вопрос
Это может показаться часто задаваемым вопросом по stackoverflow, но мои требования немного отличаются.Хотя ранее я использовал BackgroundRb и DJ для запуска фоновых процессов в ruby, на этот раз моим требованием является выполнение некоторой сложной аналитики и математических вычислений на огромном наборе данных, и мне нужно делать это только примерно в первые 15 дней месяца.Исходя из этого, у меня возникает соблазн использовать cron и запустить ruby-скрипт для достижения этой цели.
Что я хотел бы знать / понять, так это:1 . Является ли использование cron хорошей идеей (потому что я не системный администратор, и поэтому, хотя у меня есть базовое представление о cron, я не слишком уверен, что сделаю это идеально) 2 - Можем ли мы каким-то образом изменить DJ, чтобы он запускался только в первые 15 дней месяца (с использованием / без использования cron), а затем просто остановиться и выйти, как только все задания в очереди на день закончатся (не хочу, чтобы он каждый раз пинговал базу данных для нового задания ... какие бы задания ни были в очереди при запуске DJ, это будет все).
Я не уверен, правильно ли я сформулировал вопрос, но любая помощь в этом направлении будет высоко оценена.
Спасибо
Решение
Согласно спецификации времени cron "минута, час, день, месяц, день недели", 3:33 утра с 1 по пятнадцатое число каждого месяца будет "33 3 1-15 * *"
Другие советы
Использовать cron было бы действительно просто, и у вас есть много примеров, и это надежно.
В любом случае, вот несколько скриншотов из Railcasts, на которые вы, возможно, захотите взглянуть:
Да, а почему бы и нет?Используйте cron.Он действительно хорошо протестирован в дикой природе, хорошо подходит для выполнения периодических задач и невероятно прост в использовании.Вам даже не нужно изучать синтаксис crontab (хотя это очень просто) - просто заносите свой скрипт в /etc/cron.ежедневно (эта опция может быть доступна только в некоторых дистрибутивах Linux).
Я не уверен насчет "только первых семнадцати дней месяца", но вы можете легко справиться с этим условием в своей задаче, не так ли?
Редактировать:
Ознакомьтесь с ответом par, чтобы узнать, как запускать задачу только в определенный промежуток дней.
У меня тоже было такое требование.Я следовал рецепту 75 "Автоматические периодические задания" в Расширенные Рецепты Приготовления рельсов книга.Рецепт написан Дэвидом Боком.В нем есть несколько фрагментов кода и рекомендации о том, как этого можно достичь с помощью cron и capistrano.Однако существует нерешенная (но упомянутая) проблема, касающаяся пользователей / разрешений, которая должна быть на целевой машине.На самом деле сделать это правильно не так уж сложно, вам просто нужно не забыть это сделать и включить в свои сценарии развертывания capistrano.
Похоже, что Дэвид Бок продолжил работать над этим и теперь создал драгоценный камень для использования с cron:Видишь его блог, и следовать crondonkulous на github.Crondonkulous вполне может позаботиться об этом пользователе / разрешении и многом другом, я этого не пробовал.
Ярл