2013-04-07 10 views
5

Im Monit mit einer Ruby-Skript zu überwachen, die Ruby daemons gem verwendet, die über einen separaten Prozess mit PID startet - nach den Anweisungen von Monitor ruby processes with MonitÜberwachung Ruby-Skript, mit Monit - inklusive RVM

Um den Ruby-Skript muß ich ausführen RVM in die Monit start und stop Strings einzuschließen, damit ich Zugang zu allen Edelsteinen habe.

jedoch, wenn .monitrc führt bekomme ich folgende Fehlermeldung:

$rvm_path (/usr/local/rvm) does not exist./home/william/.rvm/scripts/rvm: line 174: rvm_is_a_shell_function: command not found 
/home/william/.rvm/scripts/rvm: line 185: __rvm_teardown: command not found 
'myserver_1' failed to start 
Aborting event 

ich PATH=$PATH:/home/william/.rvm/bin && . /home/william/.rvm/scripts/rvm die start und stop Kommandostrings hinzugefügt RVM zu versuchen und zu schließen. Doch nach wie vor funktioniert es nicht

Config-Datei .monitrc:

.... 

check process myserver_1 
    with pidfile /home/william/ruby/barclays/myapp.rb.pid 
    start = "/bin/bash -c 'PATH=$PATH:/home/william/.rvm/bin && . /home/william/.rvm/scripts/rvm && ruby /home/william/ruby/barclays/daemonloader.rb start'" 
    stop = "/bin/bash -c 'PATH=$PATH:/home/william/.rvm/bin && . /home/william/.rvm/scripts/rvm && ruby /home/william/ruby/barclays/daemonloader.rb stop'" 

    .... 

Vielen Dank für Ihre Hilfe.

EDIT

Ive erhielt ein Problem Gefühl auf Umgebungsvariablen in Zusammenhang steht. Zitiert aus this page

You should also know that for security reasons Monit purges the environment and only sets a spartan PATH variable that contains /bin, /usr/bin, /sbin and /usr/sbin. If your program or script dies, the reason could be that it expects certain environment variables or to find certain programs via PATH. If this is the case you should set the environment variables you need directly in the start or stop script called by monit.

Finally, Monit uses the system call execv to execute a program or a script. This means that you cannot write shell commands directly in the start, stop or exec statements. To do this, you must do as above; start a shell and issue your commands there. For example:

start program = "/bin/bash -c 'my shell command && my other command'"

Antwort

3

verwenden:

/path/to/rvm/bin/rvm in /path/to/project do ... 

Ersetzen Sie die Pfade mit der richtigen Verzeichnisse für rvm und Projekt und die ... mit den Befehlen Stopp/Start - versuchen:

/usr/bin/env "HOME=/home/william rvm_path=/home/william/.rvm 
    /home/william/.rvm/bin/rvm in /home/william/ruby/project do 
    ruby daemonloader.rb start" 

Dieser Befehl lädt RVM, cd in den Projektpfad, lade ruby ​​für diesen Ruby und führt den angegebenen Befehl aus.

+0

Ich habe dies versucht: 'start =" /home/william/.rvm/bin/rvm in/home/william/ruby ​​/ project tun ruby ​​daemonloader.rb start "'. Leider bekomme ich jetzt die Fehlermeldung "Kann rvm nicht finden!" und es scheitert. Was macht 'xxxx in yyy zzz'? Kannst du die Antwort etwas erklären? Vielen Dank. – Imme22009

+0

führen Sie dies als der Benutzer 'william'? – mpapis

+0

Ja - Benutzer: William. – Imme22009

0

Sie könnten so etwas in Monit versuchen.

start = "/bin/su - william -c 'cd /home/william/ruby/project && ~/.rvm/bin/rvm default do bundle exec ruby daemonloader.rb start'" 

Das funktionierte für mich.