Как написать надежный бесконечный процесс? - PullRequest
8 голосов
/ 04 февраля 2011

Я задал другой вопрос о просмотре каталогов, на который был дан ответ, но другая половина вопроса заключается в том, как наилучшим образом создать бесконечный процесс, в ruby, для этого.Вот требования:

  • работать вечно
  • быть под наблюдением (т.е. знать, если оно вверх или вниз)
  • иметь какой-то способ его перезапуска и обеспечениявсе вышло (Боже?)
  • начать / остановить использование Capistrano (было бы неплохо!)

Мы смотрели на BackgroundRb, но это выглядит немного устаревшим и, честно говоря,ненадежны!Мы рассмотрели DelayedJob, но, похоже, он предназначен для однократных заданий (потому что бесконечная работа, кажется, блокирует выполнение любой другой работы, поскольку задания выполняются последовательно).

Мы выполняем кучуСерверы Ubuntu, которые формируют нашу среду.

Есть идеи?

Ответы [ 4 ]

3 голосов
/ 04 февраля 2011

У меня есть машинный цикл обработки событий, который подстраивает некоторые файлы журнала nginx и помещает их в MongoDB. Сценарии "log eater" работают с демонами ruby. http://daemons.rubyforge.org/

Я обнаружил, что это намного надежнее Бога. Это также контролирует и перезапускает ваш скрипт, если он умирает. Если вам нужно уведомление о смерти бегуна, вы можете использовать monit для этого.

Вот мой скрипт бегуна для демонов:

#!/usr/bin/env ruby
require 'rubygems'
require 'bundler' 
Bundler.require(:default)
Bundler.setup(:default)

options = {
  :app_name   => "log_eater",
  :dir_mode   => :system,
  :multiple   => true,
  :backtrace  => true,
  :monitor    => true
}

Daemons.run(File.join(File.dirname(__FILE__), 'log_eater.rb'), options)

Это работает уже много месяцев без утечек или проблем. У Бога были проблемы с утечками и умиранием. Capistrano может перезапустить это, перезапустив скрипт запуска.

Вот отрывок из моего для gentoo linux

start() {
ebegin "Starting log-eater"
    cd /ruby/STABLE/quickanalytics
   `scripts/log_eater_runner.rb start -- /usr/logs/nginx.log`
eend $? "Failed to start log-eater" 
}

- после команды start для любых аргументов, которые вы хотите передать в свой скрипт.

0 голосов
/ 05 февраля 2011

В вашем случае я бы использовал Resque. Кажется, чтобы удовлетворить ваши требования. Я полагаю, что это идет с примерами сценариев для capistrano для управления рабочими. Наблюдать за работниками с помощью бога немного сложнее, но он поставляется с веб-консолью, чтобы вы могли видеть, что задумали ваши работники. Для этого есть множество плагинов, которые могут удовлетворить любые ваши потребности.

https://github.com/defunkt/resque

0 голосов
/ 04 февраля 2011

См. Книгу Пола Дикса Сервис-ориентированный дизайн с Ruby и Rails . Также посмотрите на Синатра .

0 голосов
/ 04 февраля 2011

Я бы наверное посмотрел на daemon-kit.Не уверен, если он отвечает всем вашим требованиям, хотя:

https://github.com/kennethkalmer/daemon-kit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...