2013-04-07 11 views
5

im przy Monit monitorować skrypt ruby, który używa Ruby daemons gem, który uruchamia oddzielny proces z PID - postępując zgodnie z instrukcjami Monitor ruby processes with MonitMonitoring Ruby skrypt, używając Monit - Łącznie RVM

W celu realizacji scenariusza rubinowy muszę do włączenia RVM w ciągi Monit start i stop, więc mam dostęp do wszystkich klejnotów.

Jednak gdy .monitrc wykonuje pojawia się następujący błąd:

$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 

dodałem PATH=$PATH:/home/william/.rvm/bin && . /home/william/.rvm/scripts/rvm do ciągów poleceń start i stop spróbować i obejmują RVM. Jednak nadal nie działa

plik konfiguracyjny .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'" 

    .... 

Dzięki za pomoc.

EDIT

Ive got a feeling problem jest związany z zmiennych środowiskowych. Cytując 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'"

Odpowiedz

3

użyj:

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

Wymień ścieżki z odpowiednich katalogów dla RVM i projektu oraz ... z poleceniami do stop/start - spróbuj:

/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" 

To polecenie załaduje RVM, cd do ścieżki projektu, załaduj ruby ​​dla tego ruby ​​i wykonaj podane polecenie.

+0

Próbowałem tego: 'start =" /home/william/.rvm/bin/rvm w/home/william/ruby ​​/ project do ruby ​​daemonloader.rb start "'. Niestety teraz pojawia się komunikat o błędzie "Nie można znaleźć instalacji rvm!" i zawiedzie. Do czego służy 'xxxx in yyy do zzz'? Czy mógłbyś nieco wyjaśnić odpowiedź? Dzięki. – Imme22009

+0

używasz tego jako użytkownik 'william'? – mpapis

+0

Tak - Użytkownik: william. – Imme22009

0

Możesz spróbować czegoś takiego w Monit.

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

To zadziałało dla mnie.