2014-11-23 3 views
6

나는 monit에 상당히 익숙하다. 그리고이 스크립트가 충돌 한 프로그램을 다시 시작하기에 충분한 지 궁금해서 프로그램 1이 프로그램 이름이라고 말할 수있다.Monit 재시작 프로그램 스크립트

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

는 MONIT는 프로그램이나 스크립트를 실행하는 시스템 호출 execv와를 사용합니다. 즉, 시작 부분에 쉘 명령을 직접 입력하거나 stop 또는 exec 문을 쓸 수 없습니다. 이렇게하려면 위와 같이해야합니다. 셸을 시작하고 거기에 명령을 실행하십시오. Read about execution

는 프로그램이나 스크립트를 실행해야하는지 단지 예입니다 :의 당신이 있다고 가정 해 봅시다 ConfigurationExamples

+0

그것은 말합니다 : 'program1'프로세스가 실행되고 있지 않습니다. 다시 시작하려고합니다. 시작 :/bin/bash. – Zero

+1

시작하지 못했습니다. 설명서를 읽으십시오. 잘못된 것을 알지 못합니다. 진짜 "program1"이라는 이름으로 처리하는거야? –

+0

그리고 당신은 그와 함께 일하기 전에 프로세스를 시작해야합니다. –

1

을 바탕으로

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

을이 같은 스크립트를

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

이 명령을 사용하여 MONIT 운영하는 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 -c monit.conf 

이제 MONIT가 백그라운드에서 실행을하고

0

나는 간단한 시작됩니다 죽으면 과정을 다시 실행 노드 서버. 죽이면 다시 시작될 것이고 올바르게 설정 되었다면 이메일을 받게 될 것입니다.

위치 /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) 

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 

LOCATION :

(우분투)은/etc/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/을 누르십시오. 결과가 표시됩니다. 이제 프로세스 ID를 'monit status'또는 다른 방법으로 찾아서 프로세스를 종료하십시오. 프로세스가 존재하지 않는다는 메일을 받게되지만 잠시 후 서버가 실행되고 '프로세스가 다시 시작되었습니다'라는 메시지가 나타납니다.

하지만 다음 다시 시작되지 않습니다

monit stop nodejs-server 

같은 MONIT 명령으로 프로세스를 중지하는 경우, 기억하시기 바랍니다. 그리고 당신은 ur 프로세스가 중지되었다는 메일을받습니다.