2011-01-10 9 views
13

Ich habe eine Reihe von Ruby-Skripte, die lange laufen, ich möchte sicherstellen, dass alle 30 Sekunden oder so diese oben sind.Monitor Rubin Prozesse mit Monit

Ich beginne normalerweise die Befehle durch einfache ruby script-name.rb

Wie kann ich monit konfigurieren, nachdem diese Skripte suchen?

Update: Ich versuchte this method to create a wrapper script zu folgen, die dann den Ruby-Prozess starten würde, aber es schien nicht die .pid Datei und Eingabe ‚./wrapper-script stop‘ nichts getan zu erstellen:/

Sollte Ich schreibe die PID in Ruby oder benutze ein Wrapper-Skript, um die PID für Monit zu erstellen?

+0

Dafür ist es da. – DigitalRoss

Antwort

6

Das Monit Wiki hat viele Konfigurationsbeispiele:

http://mmonit.com/wiki/Monit/ConfigurationExamples

Nur eine einfache wählen und ändern nach Ihren Bedürfnissen.

Update:

echo $$ > /var/run/xyz.pid; 

Haben passen Sie das Skript an Ihre Bedürfnisse: das Wrapper-Skript die pid für Sie in dieser Zeile schaffen sollte? Ist es ausführbar (chmod +x)? Hat es Schreibrechte für das Ziel? Vielleicht posten Sie den Wrapper, den Sie verwenden möchten, damit ich Ihnen mehr helfen kann.

+0

Danke, aber ich kann keine .pid-Datei auf der Festplatte für die Ruby-Prozesse finden? – Tom

+5

Nun, wenn Ihre Skripte keine erstellen, dann gibt es keine PID-Datei. Ändern Sie entweder Ihr Skript, um eines zu erstellen, oder folgen Sie dem FAQ-Eintrag: http://mmonit.com/wiki/Monit/FAQ#pidfile –

+0

Tom, machen Sie Fortschritte dabei? Helfen die Links? Wenn nicht, bearbeiten Sie vielleicht Ihre Frage, um uns mitzuteilen, wie weit Sie gekommen sind. –

0

Das Schreiben der PID-Datei in Ihrem Ruby-Skript kann für Sie am einfachsten sein (öffnen Sie einfach eine Datei und schreiben Sie $$ darin). Der Wrapper-Skript-Ansatz sollte jedoch gut funktionieren. Verfügt Ihr Skript über die Berechtigung zum Schreiben in eine Datei in /var/run (oder wo immer Sie die PID-Datei einfügen)?

4

Sie müssen kein Wrapper-Skript schreiben oder irgendeine Art von schwarzer Magie ausprobieren, verwenden Sie einfach die Daemons-Bibliothek und Sie sind fertig.

Stellen Sie sich vor, dass Sie eine Klasse Arbeiter haben, die eine Methode „run“ hat, die so aus der Steckdose oder etwas zu lesen, hier eine Endlosschleife eintritt, wie Sie Ihre Daemons Wrapper schreiben würde:

# this is file my_worker_control.rb 
require 'rubygems' 
require 'daemons' 
require 'worker' 

Daemons.run_proc(:app_name => 'my_worker', :dir_mode => :system, :log_output => true) do 
    Worker.run 
end 

Einmal das Skript fertig ist, nennt es nur von der Kommandozeile oder einem init.d-Skript:

my_worker_control.rb Lauf | start | stop | restart

Diese Konfiguration eine „my_worker.pid“ Datei unter "ausgegeben/var/run "und du kannst mit monit den Prozess überwachen mit dieser Datei.

+0

Haben Sie eine Beispielverwendung von Daemons? – Tom

+0

Aktualisierte Antwort. –

+0

In den Enden ist das nur ein Wrapper-Skript, abstrahiert in einem Ruby-Juwel. Die Bash-Version aus dem Monit-Wiki ist nicht mehr "schwarze Magie" als diese. –

0

Als Alternative (zum Monit), schauen Sie sich bluepill an.

0

(Sicher außer Thema aber) wie es ist über Ruby, warum verwenden Sie nicht: http://god.rubyforge.org/?

+0

Ich benutze eine winzige VPS, Gottes Speichernutzung schien teurer zu sein, als ich mir leisten konnte. – Tom

1

die Datei ändern:

/etc/init.d/skeleton 

Sie benötigen, um etwas zu ändern, und dann:

chmod +x /etc/init.d/process_name 
sudo update-rc.d process_name defaults 
sudo /etc/init.d/process_name (start| stop| reload) 

Jetzt Monit nur bei der pid verwenden /var/run/process.pid

Startort: ​​sudo

starten /etc/init.d/process

Stopstelle: sudo /etc/init.d/process

Prost zu stoppen

0

diese Zeile in der Ruby-Skript yourapp.rb hinzufügen, das schafft eine pid Datei mit dem Namen yourapp.pid

File.open('/somepath/yourapp.pid', 'w') {|f| f.write Process.pid }

konfigurieren Monit für die pid in /etc/monit/conf.d/yourapp zu überprüfen

Prüfprozess yourapp wit h pidfile /somepath/yourapp.pid