2014-11-23 3 views
6

Я довольно новичок в monit, и мне было интересно, достаточно ли этого сценария для перезапуска разбитой программы, скажем, program1 - это имя программы.Monit restart program script

check process program1 
matching "program1" 
start program = "/home/user/files/start.sh" 
stop program = "/home/user/files/stop.sh" 

Будет ли он перезапускать разбитую программу сейчас? И как я могу заверить, что он не перезапускает программу, когда она работает?

Редактировать: Дополнительная информация Программа использует порт 30000 udp. Это сделает его более осторожным? И сколько секунд между «циклами»?

if failed port 30000 type UDP for 3 cycles then restart 

ответ

7

монит использует execv системный вызов, чтобы выполнить программу или скрипт. Это означает, что вы не можете писать команды оболочки непосредственно в начале, останавливать или выполнять инструкции exec. Чтобы сделать это, вы должны сделать, как указано выше; запустите оболочку и выпустите там свои команды.

Read about execution

Это просто пример того, что вы должны выполнить программу или скрипт:

check process program1 
matching "program1" 
start program = "/bin/bash -c '/home/user/files/start.sh'" 
stop program = "/bin/bash -c '/home/user/files/stop.sh'" 

Основываясь на ConfigurationExamples

+0

В нем говорится: «Процесс program1» не работает. попытка перезагрузки. start:/bin/bash. Не удалось запустить – Zero

+1

Пожалуйста, прочтите документацию, я не знаю, что вы делаете неправильно. Вы обрабатываете имя под названием «program1»? –

+0

, и вы должны начать процесс, прежде чем monit сможет работать с ним. –

1

скажем, у вас есть сценарий, как это:

#!/usr/bin/python 
import os, time 
f = open('/tmp/myapp.pid', 'w') 
f.write(str(os.getpid())) 
f.close() 
time.sleep(9) 

Создать monit.conf

set httpd port 2812 and allow monit:monit 
set daemon 5 
check process program with pidfile /tmp/myapp.pid 
    start program = "/home/vagrant/myapp.py 

Затем запустите Monit с этой командой:

monit -c monit.conf 

Теперь монит работает в фоновом режиме и повторите процесс, если он умирает

0

Начну простой сервер узла, который, если вы убьете, monit снова перезапустит его, и вы получите электронное письмо, если оно настроено правильно.

расположение /home/xxx/monitoring/nodejs

Файл: узел-server.js

var http = require('http'); 
var port = 8002; 
var fs = require('fs'); 
var logStream = fs.createWriteStream(port+"_log.txt", {'flags':'a'}); 
var count = 0; 
http.createServer(function(req, res){ 
    var output = (++count) + ' Request received in '+port+' @ ' + new Date()+'\n'; 
    console.log(output); 
    logStream.write(output); 
    res.writeHead(200, {'Content-Type' : 'text/plain'}); 
    res.end('From '+port+' @ ' + new Date()); 
}).listen(port); 
console.log('Server running @ ' + port) 

ФАЙЛ: server.sh

#!/bin/bash 

process=$1 
PID_FILE="/home/xxx/monitoring/nodejs/file.pid" 
case $process in 
    start) 
     echo "STARTING node js server in port 8002" 
     nohup /usr/sbin/node /home/xxx/monitoring/nodejs/node-server.js > /home/xxx/monitoring/nodejs/server.log 2>&1 & 
     echo $! > $PID_FILE 
     ;; 

    stop) 
     kill -9 $(cat $PID_FILE) 
     rm $PID_FILE 
     ;; 

    *) 
     echo "INVALID OPTION" 
     ;; 
esac 

МЕСТОНАХОЖДЕНИЕ:/и т.д./Monit/monitrc (для убунту)

set mail-format { 
    from: [email protected] 
    subject: monit alert -- XXX-PROD $EVENT $SERVICE 
    message: $EVENT Service $SERVICE 
       Date:  $DATE 
       Action:  $ACTION 
       Host:  $HOST 
       Description: $DESCRIPTION 

Your faithful employee, 

} 
set mailserver smtp.gmail.com port 587 username "[email protected]" password "xxx" using tlsv1 
set alert [email protected] 


check process nodejs-server with pidfile /home/xxx/monitoring/nodejs/file.pid 
     start program = "/home/xxx/monitoring/nodejs/server.sh start" 
     stop program = "/home/xxx/monitoring/nodejs/server.sh stop 

"

После запуска сервера нажмите браузер http://localhost:8002/. Он покажет некоторый результат. Теперь убейте процесс, найдя его идентификатор процесса либо из состояния «monit», либо из любого другого средства. Вы получите письмо, в котором говорится, что процесс не существует, но через некоторое время сервер запустится, и вы получите сообщение о том, что «процесс начался снова».

Но, пожалуйста, помните, что если вы остановите процесс из команды MONIT как

monit stop nodejs-server 

, то он не будет перезапущен. И вы получаете сообщение о том, что процесс ur был остановлен.

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