python-监控服务
最近写了一个web测试程序,因为部署在其他地方,所以想弄个监控的进程去看服务是不是还在,要是不在好发邮件,就用python简单的写了一个。
想法是这样的,单独运行一个monitor的脚本,每隔一段时间去访问web服务,如果无法链接,就说明服务挂了,要发邮件通知下,如果恢复了,那就发邮件提醒已经恢复。
当然,有的时候也要考虑到监控进程本身就挂了,或者不想监控了。
首先监控脚本是这样,很简单:
monitor.py
#-*-coding
'''
简单的monitor函数,主要监控一个远程服务是否还在
system 是一个系统model
'''
import time
import sys def monitor(system):
last_monitor_status=True
TimeInterval=10
while True:
is_active=check_system_status(system.env.env_ip,system.env.env_port,\
system.env.get_env_path())
if is_active==False and last_monitor_status==True:
'''
system is down,do something
'''
pass elif is_active==True and last_monitor_status==False:
'''
system revover
'''
pass
else:
pass
last_monitor_status=is_active
time.sleep(TimeInterval) if __name__=="__main__":
system=sys.argv[1]
monitor(system)
然后是监控的一些操作
control.py
#-*-coding:utf-8
import subprocess
import os def startMonitor(system):
'''
通过subprocess去启动监控
'''
monitorprocess=subprocess.Popen(["python","monitor.py","{0}".format(system)],\
shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) output,error=monitorprocess.communicate(input=None)
if error:
raise RuntimeError,error
pid=monitorprocess.pid
return True def stopMonitor(pid):
kill_result={0:"success",256:"no such process"}
kill_status=os.system("kill -9 {0}".format(pid))
return kill_result[kill_status] def checkMonitorProcess(pid):
systemcmd="ps -ef|grep -v '<defunct>'|awk '{print $2}'|grep {0}".\
format(pid)
monitorstatus=os.system(systemcmd)
return monitorstatus
用的话还是可以用的,服务发生异常都会发送邮件,在实际运行中遇到过这样的问题
1.通过subprocess去启动monitor脚本的时候,本来想通过comunicate()方法获取output和error,如果启动失败,抛出异常,确实当error有值的时候,会抛出异常,但是当
error没有的时候,本来应该正常启动监控,但是实际上通过浏览器启动的时候,本来启动成功了,浏览器也加载完成,但是浏览器的http请求好像一直连着,当去掉communicate()方法后
又可以立即启动,并且浏览器http加载完成,这个问题很苦恼,难道是因为我monitor脚本是一直循环运行的原因吗?但是我monitor是单独启动一个进程去执行的,应该没什么关系么
2.就是当我中止监控进程,想要检查进程还在的时候,因为我是用kill -9 pid去杀进程,然后判断进程号是不是还在,但是实际上当你立刻杀死进程的时候,还会有一个<defunct>的死进程在,要过会才会被回收,所以通过grep去判断的时候,要过滤掉这个。
ps:我猜这个进程应该是类似孤儿进程之类的吧,父进程被杀了,变孤儿了,然后过会由init回收了。僵尸进程好像是子进程完成任务了,然后发送消息给父进程,但是父进程没搭理,本来父进程退出以后,子进程也就退出了,但是偏偏父进程是一个一直运行的进程,就导致了子进程没事做,但又没被回收,就变成了僵尸进程,可以看出僵尸进程不干活了,但是过多的话还是会占用资源,想要避免僵尸进程的一个办法就是把僵尸变成孤儿,要init去回收。
python-监控服务的更多相关文章
- Python 监控nginx服务是否正常
Python 监控nginx服务是否正常 #!/usr/bin/env python import os, sys, time from time import strftime while True ...
- 写一个python的服务监控程序
写一个python的服务监控程序 前言: Redhat下安装Python2.7 rhel6.4自带的是2.6, 发现有的机器是python2.4. 到python网站下载源代码,解压到Redhat上, ...
- supervisord监控服务必备命令
supervisord(http://supervisord.org/introduction.html)是一个非常优秀的进程管理工具,使用Python开发.它可以在类UNIX系统的方式让用户来准确地 ...
- python os.startfile python实现双击运行程序 python监控windows程序 监控进程不在时重新启动
用python监控您的window服务 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://world77.blog.51cto.co ...
- http服务需要pycurl模块这样去监控服务
最近运维还是比较空闲,写篇自己的心得体会.做过运维的应该都做过http服务了.像一些电子商城,或者是一些互联网公司,web的服务之类是至关重要的,近期看了刘天斯大哥的书觉得自己运维平台应该也可以这样去 ...
- python 微服务开发书中几个方便的python框架
python 微服务开发是一本讲python 如果进行微服务开发的实战类书籍,里面包含了几个很不错的python 模块,记录下,方便后期回顾学习 处理并发的模块 greenlet && ...
- 使用 Consul 作为 Python 微服务的配置中心
使用 Consul 作为 Python 微服务的配置中心 Consul 作为数据中心,提供了 k/v 存储的功能,我们可以利用这个功能为 Python 微服务提供配置中心. Consul 提供了 HT ...
- Python监控网站接口值
Python监控网站接口值: #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'liudong' import urllib,sy ...
- 使用 Dalvik 调试监控服务 (DDMS) 工具
Android 附带一个叫Dalvik 调试监控服务 (DDMS) 的调试工具,它提供端口转发服务.在设备上的屏幕捕获,设备上的线程和堆栈信息, logcat,进程, 和无线状态信息,接收呼叫和SMS ...
- Python队列服务 Python RQ Functions from the __main__ module cannot be processed by workers.
在使用Python队列服务 Python RQ 时候的报错: Functions from the __main__ module cannot be processed by workers. 原因 ...
随机推荐
- 192M内存的VPS,安装Centos 6 minimal x86,无法安装node.js
尝试了各种方法,始终安装不了node.偶然一次,安装了64位的Centos 6 minimal,竟然可以安装Node官网给出的命令安装node了,一切顺利.
- Struts2——(8)struts2中文件的上传
通过2种方式模拟单个文件上传,效果如下所示 开发步骤如下: 1.新建一个web工程,导入struts2上传文件所需jar,如下图 目录结构 2.新建Action 第一种方式 ...
- 《深入浅出WPF》笔记——模板篇
原文:<深入浅出WPF>笔记--模板篇 我们通常说的模板是用来参照的,同样在WPF中,模板是用来作为制作控件的参照. 一.认识模板 1.1WPF菜鸟看模板 前面的记录有提过,控件主要是算法 ...
- 如何提高自己的java开发功底
1.拥有扎实的基础和深刻理解OO原则 对于Java程序员,深刻理解Object Oriented Programming(面向对象编程)这一概念是必须的.没有OOPS的坚实基础,就领会不了像Java这 ...
- Cocos2dx 温馨提示(十)三种缓存类演示
在介绍了三级缓存,首先,我们必须弄清楚的一个问题:什么是纹理?它的通俗的解释,质感是它的含义的图片. 当图像加载到内存中后,,它是存在于纹理的形式.由于从这里可以看出.纹理事实上就是一块内存.这块内存 ...
- Cocos2d-x 3.1 一步一步地做改编
本文并不想谈论的屏幕改编或真理的概念.假设不知道cocos2d-x的,请先看这篇文章:http://www.cocoachina.com/gamedev/cocos/2014/0516/8451.ht ...
- wpf实现两头渐窄的线条效果
原文:wpf实现两头渐窄的线条效果 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/article/details/800 ...
- Ubuntu 14.04 64位字体美化(使用黑文泉驿)
Ubuntu 14.04安装和升级后,,斜体字体变得很难看,昨天,我得到一个晚上,最终,管理一个线索,这里整洁. 在线调研后,.一致的观点是,,使用开源字体库文泉驿理想的黑色字体效果,效果甚至没有丢失 ...
- Qt翻译---Thread Support in Qt
Thread Support in Qt QT提供线程支持在平台独立的线程类.一个安全线程的传递事件的方式,一个信号槽的链接在线程之中.这使得开发多线程容易.多线程程序也是一个有用的范例为不冻结用户界 ...
- js 看图识国家
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...