下面腳本實現定時檢測tomcat是否還活着,如果死了就啟動它,如果活太久了(24小時)就殺掉再啟動。
#!/data/pythons/p35/bin/python
# -*- coding: utf8 -*-
#定時任務 /etc/crontab
#*/5 * * * * root (/data/pythons/p36/bin/python /data/pythons/scripts/serviceDeamon.py tomcat-8780)
import psutil,time,datetime,subprocess,sys
def log42(logFile,logText):
ts = int(time.time())
dt = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
with open("/tmp/"+dt[0:10]+logFile+".log", "a") as myfile:
myfile.write(dt+" "+logText+"\n")
def startByCmdline(cmdlineKeyword):
command = 'export JAVA_HOME=/usr/local/java/jdk1.7.0_71;/bin/sh /data/web/'+cmdlineKeyword+'/bin/startup.sh'
status,output = subprocess.getstatusoutput(command)
log42('service'+cmdlineKeyword,"started"+ str(status))
def killByCmdline(cmdlineKeyword):
alive = False
for proc in psutil.process_iter():
try:
pinfo = proc.as_dict(attrs=['pid', 'name','cmdline','create_time','ppid'])
except psutil.NoSuchProcess:
pass
else:
if any('/'+cmdlineKeyword in s for s in pinfo['cmdline']):
alive = True
aliveTime = time.time()-pinfo['create_time']
if aliveTime > 60*60*24:
log42('service'+cmdlineKeyword,"old enough "+str(aliveTime/60))
p = psutil.Process(pinfo['pid'])
p.kill()
time.sleep(3)
startByCmdline(cmdlineKeyword)
else:
log42('service'+cmdlineKeyword,"too young "+str(aliveTime/60))
else:
pass
if not alive :
log42('service'+cmdlineKeyword,"died")
startByCmdline(cmdlineKeyword)
if __name__ == '__main__':
#'tomcat-8780'
if str(sys.argv[1]).__contains__('tomcat') :
killByCmdline(str(sys.argv[1]))
else:
log42('service',"wrong param")
print('param like:tomcat-8780')