2011-02-04 23 views
8

Ho fatto una domanda diversa sulla visualizzazione di directory, a cui è stata data una risposta, ma l'altra metà della domanda è come creare al meglio un processo senza fine, in ruby, per farlo. Ecco i requisiti: (? Dio)come scrivere un robusto processo senza fine?

  • correre per sempre
  • essere monitorabile (cioè sapere se è alto o in basso)
  • hanno una sorta di via di riavviarlo e garantire spetta
  • start/stop utilizzando Capistrano (sarebbe bello!)

Abbiamo esaminato BackgroundRb, ma che sembra un po 'obsolete e ad essere onesti inaffidabile! Abbiamo esaminato DelayedJob, ma questo sembra orientato per un lavoro fuori (perché un lavoro senza fine sembra bloccare qualsiasi altro lavoro dal fare come i lavori sono fatti in sequenza).

Stiamo eseguendo un gruppo di server Ubuntu che formano il nostro ambiente.

Qualche idea?

+0

Sembra che si desidera scrivere un servizio - questo è qualcosa che il rubino probabilmente non è ottimizzato per – Marm0t

+1

@ Marm0t: Dove hai preso questa idea? Puoi scrivere un servizio in qualsiasi lingua completa di Turing. –

+0

Cosa farà il tuo processo senza fine? Ciò può fare una grande differenza su quale sia la soluzione migliore. –

risposta

3

Ho un ciclo di macchina degli eventi che codifica alcuni file di log di nginx e li inserisce in MongoDB. Gli script "mangiatore di log" sono in esecuzione con i daemon ruby. http://daemons.rubyforge.org/

Ho trovato molto più affidabile di dio. Questo monitora e riavvia il tuo script anche se muore. Se vuoi ricevere una notifica se il corridore muore, puoi usare Monit per farlo.

Ecco il mio script corridore di demoni:

#!/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) 

Questo è in corso da molti mesi senza perdita o nessun problema. Dio ha avuto problemi con perdite e morte. Capistrano può riavviarlo riavviando lo script di avvio.

Ecco un estratto dalla miniera per 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" 
} 

- dopo che il comando di avvio è per eventuali argomenti che vogliate passare allo script.

+0

Grazie Michael! Ho intenzione di dare questo colpo. – phil

0

Nel tuo caso, utilizzerei Resque. Sembra soddisfare le tue esigenze. Credo che venga fornito con script di esempio per capistrano per il controllo dei lavoratori. Monitorare i lavoratori con Dio è un po 'più complicato, ma viene fornito con una console Web in modo che tu possa vedere cosa stanno facendo i tuoi dipendenti. Ci sono un sacco di plugin anche per soddisfare tutte le esigenze che potresti avere.

https://github.com/defunkt/resque

Problemi correlati