Монит перезапустить скрипт

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

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

3 ответов


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

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


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

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

создать монит.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

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


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

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

файл: узел-сервер.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=
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

местоположение: / etc / monit / monitrc (для ubuntu)

set mail-format {
   from: monit@TEST
   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 "services.xxx@gmail.com" password "xxx" using tlsv1
set alert xxx@gmail.com


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 остановлен.