2014-11-23 16 views
6

Sono abbastanza nuovo da monit e mi chiedevo se questo script fosse sufficiente per riavviare un programma in crash, diciamo che program1 è il nome del programma.Script del programma di riavvio Monit

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

Riavvia subito un programma bloccato? E come posso assicurare che non riavvii il programma quando funziona?

Modifica: altre informazioni Il programma utilizza la porta 30000 udp. Questo renderà più cauto? E quanti secondi ci sono tra i "cicli"?

if failed port 30000 type UDP for 3 cycles then restart 

risposta

7

Monit utilizza l'execv chiamata di sistema per eseguire un programma o uno script. Ciò significa che non è possibile scrivere comandi shell direttamente all'inizio, istruzioni stop o exec. Per fare questo, devi fare come sopra; avvia una shell e invia i tuoi comandi lì.

Read about execution

Questo è solo esempio ciò che si dovrebbe eseguire il programma o script:

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

Sulla base ConfigurationExamples

+0

Dice: il processo 'program1' non è in esecuzione. cercando di riavviare. inizio:/bin/bash. Impossibile avviare – Zero

+1

Leggere la documentazione, non so cosa stai facendo male. Elaborate davvero "program1"? –

+0

e dovresti avviare il processo, prima che monit possa lavorare con lui. –

1

diciamo di avere uno script come questo:

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

Creare un 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 

Quindi eseguire il Monit con questo comando:

monit -c monit.conf 

Ora Monit viene eseguito in background ed eseguire nuovamente il processo se invece muore

0

inizierò un semplice server dei nodi, che se si uccide, monit lo riavvierà di nuovo e riceverai anche un'email se configurato correttamente.

posizione /home/xxx/monitoring/nodejs

File: 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) 

FILE: 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 

POSIZIONE:/etc/Monit/monitrc (per Ubuntu)

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 

"

Una volta eseguito il server, premere il browser http://localhost:8002/. Visualizzerà alcuni risultati. Ora uccidi il processo trovando il suo id di processo sia da 'stato monit' o da qualsiasi altro mezzo. Riceverai una mail che dice che il processo non esiste ma, dopo un po 'di tempo, il server verrà eseguito e riceverai una mail che dice "riavviato il processo".

Ma ricordate, se si arresta il processo dal comando di Monit come

monit stop nodejs-server 

allora non verrà riavviato. E ricevi una mail che dice che il tuo processo è stato fermato.

Problemi correlati