2014-11-23 24 views
6

Jestem dość nowy, aby monitorować i zastanawiałem się, czy ten skrypt wystarczy, aby ponownie uruchomić rozbity program, powiedzmy, program1 to nazwa programu.Monit restartować skrypt programu

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

Czy teraz uruchomi ponownie uruchomiony program? I jak mogę zapewnić, że nie uruchamia ponownie programu, gdy działa?

Edycja: trochę więcej informacji Program korzysta z portu 30000 udp. Czy to spowoduje, że będzie bardziej ostrożny? A ile sekund dzieli "cykl"?

if failed port 30000 type UDP for 3 cycles then restart 

Odpowiedz

7

Monit używa execv wywołań systemowych do wykonywania programu lub skryptu. Oznacza to, że nie można pisać poleceń powłoki bezpośrednio w instrukcjach stop, stop lub exec. Aby to zrobić, musisz zrobić tak, jak powyżej; uruchom powłokę i wydaj tam swoje polecenia.

Read about execution

Jest to tylko przykład tego, co należy wykonać program lub skrypt:

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

Na podstawie ConfigurationExamples

+0

Mówi: proces "program 1" nie działa. próbuje ponownie uruchomić. start:/bin/bash. Nie można uruchomić – Zero

+1

Proszę przeczytać dokumentację, nie wiem, co robisz źle. Przetwarzasz naprawdę nazwany "program1"? –

+0

i powinieneś rozpocząć proces, zanim monit będzie mógł z nim współpracować. –

1

powiedzmy masz skrypt tak:

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

Tworzenie 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 

Następnie uruchom Monit z tym poleceniem:

monit -c monit.conf 

Teraz Monit działa w tle i ponownie uruchomić proces jeżeli obumrze

0

zacznę prosty serwer węzła, który jeśli zabijesz, monit ponownie go uruchomi, a otrzymasz e-mail również, jeśli skonfigurujesz poprawnie.

lokalizacja /home/xxx/monitoring/nodejs

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

LOKALIZACJA:/etc/Monit/monitrc (na 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 

"

Po uruchomieniu serwera kliknij w przeglądarce http://localhost:8002/. Wyświetli wynik. Teraz zabij proces, znajdując jego identyfikator procesu ze "statusu monitorowania" lub z dowolnego innego środka. Otrzymasz wiadomość e-mail z informacją, że proces nie istnieje, ale po pewnym czasie serwer uruchomi się, a otrzymasz wiadomość z informacją, że proces rozpoczął się ponownie.

Ale proszę pamiętać, jeśli zatrzymać proces z poleceniem Monit jak

monit stop nodejs-server 

to nie zostanie wznowiona. Otrzymujesz wiadomość, że proces ur został zatrzymany.