[英]Monit restart program script
我對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
Monit使用系統調用execv來執行程序或腳本。 這意味着您無法直接在start,stop或exec語句中編寫shell命令。 要做到這一點,你必須這樣做; 啟動一個shell並在那里發出命令。
這只是您應該執行程序或腳本的示例:
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.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會重新啟動它,如果設置正確,你也會收到一封電子郵件。
location /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 "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 / 。 它會顯示一些結果。 現在通過從“監控狀態”或任何其他方式查找其進程ID來終止進程。 您將收到一封郵件,說明該流程不存在,但在一段時間后,服務器將再次運行,您將收到一封郵件,說“再次啟動流程”。
但是請記住,如果你從monit命令停止進程就好了
monit stop nodejs-server
然后它不會重新啟動。 你收到一封郵件說你的流程已經停止了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.