Сценарий программы перезагрузки Monit

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

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

person Zero    schedule 23.11.2014    source источник


Ответы (3)


Monit использует системный вызов execv для выполнения программы или сценария. Это означает, что вы не можете писать команды оболочки непосредственно в операторах start, stop или 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

person Зелёный    schedule 23.11.2014
comment
Пишет: процесс Program1 не запущен. пытаюсь перезапустить. начало: /бин/баш. Не смог начать - person Zero; 23.11.2014
comment
Пожалуйста, прочитайте документацию, я не знаю, что вы делаете неправильно. Вы обрабатываете действительно названную программу1? - person Зелёный; 23.11.2014
comment
и вы должны запустить процесс, прежде чем monit сможет с ним работать. - person Зелёный; 23.11.2014

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

#!/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

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

person slashmili    schedule 11.01.2015

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

местоположение /home/xxx/monitoring/nodejs

Файл: node-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

РАСПОЛОЖЕНИЕ: /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 "[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 stop nodejs-server

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

person Juvenik    schedule 01.04.2017