2013-05-13 2 views
2

Я написал сценарий, который отлично работает, чтобы запустить и остановить сервер.Monit не запускает процесс

#!/bin/bash 

PID_FILE='/var/run/rserve.pid' 

start() { 
     touch $PID_FILE 
     eval "/usr/bin/R CMD Rserve" 
     PID=$(ps aux | grep Rserve | grep -v grep | awk '{print $2}') 
     echo "Starting Rserve with PID $PID" 
     echo $PID > $PID_FILE 
} 
stop() { 
     pkill Rserve 
     rm $PID_FILE 
     echo "Stopping Rserve" 
} 

case $1 in 
    start) 
     start 
     ;; 
    stop) 
     stop 
     ;; 
    *) 
     echo "usage: rserve {start|stop}" ;; 
esac 
exit 0 

Если я начинаю его, запустив

rserve start 

, а затем начать monit будет правильно захватить PID и сервер:

The Monit daemon 5.3.2 uptime: 0m 

Remote Host 'localhost' 
    status       Online with all services 
    monitoring status     Monitored 
    port response time    0.000s to localhost:6311 [DEFAULT via TCP] 
    data collected     Mon, 13 May 2013 20:03:50 

System 'system_gauss' 
    status       Running 
    monitoring status     Monitored 
    load average      [0.37] [0.29] [0.25] 
    cpu        0.0%us 0.2%sy 0.0%wa 
    memory usage      524044 kB [25.6%] 
    swap usage      4848 kB [0.1%] 
    data collected     Mon, 13 May 2013 20:03:50 

Если я остановить его, он будет правильно убить процесс и не контролировать его. Однако, если я начну снова, он не будет снова запустить сервер:

ps ax | grep Rserve | grep -vc grep 
1 
monit stop localhost 
ps ax | grep Rserve | grep -vc grep 
0 
monit start localhost 

[UTC May 13 20:07:24] info  : 'localhost' start on user request 
[UTC May 13 20:07:24] info  : monit daemon at 4370 awakened 
[UTC May 13 20:07:24] info  : Awakened by User defined signal 1 
[UTC May 13 20:07:24] info  : 'localhost' start: /usr/bin/rserve 
[UTC May 13 20:07:24] info  : 'localhost' start action done 
[UTC May 13 20:07:34] error : 'localhost' failed, cannot open a connection to INET[localhost:6311] via TCP 

Вот monitrc:

check host localhost with address 127.0.0.1 
    start = "/usr/bin/rserve start" 
    stop = "/usr/bin/rserve stop" 
    if failed host localhost port 6311 type tcp with timeout 15 seconds for 5 cycles 
    then restart 
+0

Может ли ваша программа понадобиться более 10 секунд для запуска? – Wrikken

+0

Я также пробовал тайм-аут 30, и для запуска требуется менее 5 секунд. Даже если я поставлю оригинальную команду «R CMD Rserve» с «\ bin \ bash -c» на monitrc, это не сработает. Кажется, он не может запустить его из monit daemon. –

+0

Вы когда-нибудь это выясняли? У меня похожие проблемы. – StFS

ответ

6

Я имел начало проблемы или остановить процесс тоже через командную оболочку. Одним из решений может быть добавить «/ bin/Баш» в конфигурации, как это:

start program = "/bin/bash /urs/bin/rserv start" 
stop program = "/bin/bash /urs/bin/rserv stop" 

Он работал для меня.

+0

Btw, я получил информацию из этого http://lists.gnu.org/archive/html/monit-general/2008-12/msg00004.html –

+0

Также см. Этот http://lists.gnu.org/archive/html/monit-general/2010-01/msg00035.html –

+3

Это решение описано в FAQs monit более подробно, почему это необходимо и как его использовать http://mmonit.com/wiki/Monit/FAQ#execution – LeoR

3

monit - тихий убийца. Это ничего не говорит. Вот что я хотел бы проверить, какой monit не поможет вам определить

  1. Проверить права доступа ко всем файлам, которые вы читаете/пишете. Если вы перенаправляете вывод в файл, убедитесь, что файл доступен для записи с помощью uid и gid, которые вы используете для выполнения программы.
  2. Снова проверьте разрешение exec на программе, которую вы пытаетесь запустить.
  3. Укажите полный путь к любой программе вы пытаетесь выполнить (не обязательно, но вам не нужно беспокоиться о том, что путь не задан, если вы всегда указываете полный путь)
  4. Убедитесь, что вы можете запускать программу за пределами monit без каких-либо ошибок, прежде чем пытаться исследовать почему monit не запускается.
0

Когда монит начинает он проверяет свою собственную PidFile и проверяет, если процесс с согласования PID уже работает - если это произойдет, то он просто просыпается этот процесс.

в вашем случае, проверьте, если этот PID используется каким-либо другим способом: пс -ef | Grep 4370

если да, то вам нужно удалить файл ниже (обычно в/запуска каталога) и start monit again: monit.pid

Смежные вопросы