# -*- coding: utf-8 -*-
# @author flynetcn
import sys, os, re, datetime;
LOG_FILE = '/var/log/www/serverMonitor.log';
SERVER_PID_FILE = '/var/log/www/server.pid';
SERVER_NAME = 'myserver';
START_SERVER_CMD = 'sh /bin/www/service/start.sh';
def logger(level, str):
logFd = open(LOG_FILE, 'a');
logFd.write(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')+": "+("WARNING " if level else "NOTICE ")+str);
logFd.close();
def startServer():
import subprocess;
logger(0, "start server...\n");
logFd = open(LOG_FILE, 'a');
ret = subprocess.call([START_SERVER_CMD], shell=True, stdout=logFd, stderr=logFd);
logFd.close();
if ret != 0:
logger(1, "start server failed - %s\n" % (str(ret)));
else:
logger(0, "start server ok\n");
def monitorServer():
try:
pidFd = open(SERVER_PID_FILE);
pid = pidFd.readlines();
except:
pid = [];
if not pid:
logger(1, "pidfile is empty\n");
startServer();
return;
pid = pid[0].strip();
if not os.access('/proc/'+pid, os.R_OK):
logger(1, "start server - process(pid:%s) not find\n" % (pid));
startServer();
return;
elif SERVER_NAME not in open('/proc/'+pid+'/cmdline').readline():
logger(1, "start server - process(pid:%s) is not %s\n" % (pid, SERVER_NAME));
startServer();
return;
else:
logger(0, "server is running - pid:%s\n" % (pid));
return;
if __name__ == "__main__":
monitorServer();
检查服务器的pid文件,如果文件不存在或pid对应的进程已死重启服务器
最新推荐文章于 2024-08-06 04:24:39 发布