在我们日常运维中,写脚本监控一个进程是比较常见的操作,比如我要监控mysql进程是否消失,如果消失就重启mysql。

用下面这段代码就可以实现:

#!/bin/shDate=` date ‘+%c’`while :doif ! ps aux | grep -w mysqld | grep -v grep >/dev/null 2>&1then/etc/init.d/mysqld startecho $Date mysqld was reboot >>/var/log/reboot_mysql.logfidone

但如果监控脚本本身出了问题,就无法按我们要求启动程序了,这里这是以mysql为例子,但实际中如果是负责报警的脚本出了问题,报警没发出来,那就比较尴尬了,所以为保证我们的检查脚本能实时运行,我们有时需要写一个守护进程(当然不止脚本,系统中的任何程序都可以靠守护进程启动),这就是我们今天要说的主题,如何给脚本写一个daemon进程,我们先上代码:

#!/usr/bin/pythonimport subprocessfrom daemon import runnercmd = “/root/demo_script/restart_mysql.sh”class App():def __init__(self):self.stdin_path = ‘/dev/null’self.stdout_path = ‘/dev/tty’self.stderr_path = ‘/dev/tty’self.pidfile_path =  ‘/tmp/hello.pid’self.pidfile_timeout = 5def start_subprocess(self):return subprocess.Popen(cmd, shell=True)def run(self):p = self.start_subprocess()while True:res = p.poll()if res is not None:p = self.start_subprocess()if __name__ == ‘__main__’:app = App()daemon_runner = runner.DaemonRunner(app)daemon_runner.do_action()

脚本比较简单,没什么特别的逻辑,关于daemon这个模块如何使用,我这里给出一段官方的解释,写的非常明白,注意哟,是英文的,在这我就不翻译了,如果不理解就查查字典,就当多学几个单词了吧。

__init__(self, app)|      Set up the parameters of a new runner.||      The `app` argument must have the following attributes:||      * `stdin_path`, `stdout_path`, `stderr_path`: Filesystem|        paths to open and replace the existing `sys.stdin`,|        `sys.stdout`, `sys.stderr`.||      * `pidfile_path`: Absolute filesystem path to a file that|        will be used as the PID file for the daemon. If|        “None“, no PID file will be used.||      * `pidfile_timeout`: Used as the default acquisition|        timeout value supplied to the runner’s PID lock file.||      * `run`: Callable that will be invoked when the daemon is|        started.||  do_action(self)|      Perform the requested action.||  parse_args(self, argv=None)|      Parse command-line arguments.

这样就完成了,守护进程的启动比较高大上,输入以上代码后,可以直接在终端输入:

#python monitor.py  start

当然还有stop,restart等参数。

这里我介绍的是其中一个应用场景,实际中可以灵活运用,比如1台服务器上启动的程序过多,环境配置比较复杂,就可以先启动daemon进程,然后通过daemon来启动其它所有应用程序,就不用一个一个应用程序启动了,而且还能起到实时监控的作用,很方便吧,这篇就到这里,有问题可以给我留言。

大神教你如何给脚本写一个守护进程相关推荐

  1. 文章如何做伪原创 SEO大神教你几招做原创网站文章的心得

    想要创作出好的文章并被百度所喜欢,就非常需要SEO的优化能力,以及要对文章进行塬创或伪塬创,那么,如何做伪塬创文章?以及如何做好塬创网站文章呢?对此,本文小编就为大家带来了几招做"塬创&qu ...

  2. linux 计算器 c语言,大神教你如何用C语言实现科学计算器

    原标题:大神教你如何用C语言实现科学计算器 用C实现的科学计算器 使用C语言写的科学计算器,可以实现四则运算.三角函数运算.指对数运算:优先级正确:能智能屏蔽空格,能识别输入错误和运算错误,能实现继续 ...

  3. 大神教芯片数据手册怎么读

    题目:大神教芯片数据手册怎么读 [摘要]数据手册怎么看? 先看芯片特性.应用场合.内部框图,有一个宏观的了解. 重点关注芯片参数,同时参考手册给出的参数图. 选定器件后,研究管脚定义.推荐的PCB l ...

  4. 手动计算机键,大神教你把电脑设置每天自动开机,从此以后再也不用手动按电源键了!...

    为了让自己的办公桌面更加的整洁干净,很多朋友都会在桌上放置一个置物架,把笔记本电脑塞到这个置物架底下,在上面放一个显示器,这样的话桌面就会瞬间变得整洁很多.不过这有一个缺点,那就是每天早上来上班的时候 ...

  5. mc服务器出生地修改,《我的世界》MC出生地太坑爹怎么办?大神教你一个指令就搞定了!...

    <我的世界>MC出生地太坑爹怎么办?大神教你一个指令就搞定了!在沙盒游戏<我的世界>里面,玩家们刚开始进入游戏的地方就是出生地,又叫做出生点.这些出生地是系统随机安排生成的地方 ...

  6. win7如何开启无线网卡服务器,大神教你win7无线网卡怎么设置wifi

    wifi上网已经风靡全世界,可是电脑开启wifi是需要无线网卡的,那么win7无线网卡怎么设置wifi呢?这就有点深度了,大家都知道,小编最擅长深入浅出地教大家一些知识,今天就给大家带来大神教你win ...

  7. win10添加网络打印机_大神教你设置 win10系统安装打印机及驱动的详细方案 -win10使用教程...

    人吃五谷杂粮会生病,电脑也一样.工作运行时间久了就会出现很多的问题,比如win10系统安装打印机及驱动这样的状况,大部分伙计都是第一次看到win10系统安装打印机及驱动这样的事情,想请高手帮忙解决wi ...

  8. java魔剑天使_大天使之剑大神教你打造牛逼魔剑士

    大天使之剑大神教你打造牛逼魔剑士 大天使之剑哪个职业厉害?大天使之剑魔剑士怎么加点升级快?下面来看看大天使之剑大神教你打造牛逼魔剑士吧,有点长,希望对大家有帮助! 魔剑士是这个游戏升级最为快速的职业, ...

  9. pscc2018安装服务器无响应,强大的功能无法使用,大神教你一招解决PSCC2018无法安装扩展插件...

    原标题:强大的功能无法使用,大神教你一招解决PSCC2018无法安装扩展插件 详细讲解,希望对你有所帮助. 随着Adobe大魔王把PS小公举更新到了CC 2018版本以后,各种好用的插件.滤镜.扩展功 ...

最新文章

  1. Crystal Reports中的字段
  2. 程序员:如何成为一个全栈的工程师?
  3. kaggle—HousePrice房价预测项目实战
  4. Laravel 调试利器 Laravel Debugbar 扩展包安装及使用教程
  5. 播放器市场瞧一瞧: 暴风影音和豪杰解霸前身后世
  6. 什么是超级浏览器?有什么作用?如何选择?
  7. (随笔)无人机集群通信组网系统—无人机自组网
  8. 计算机毕业设计 SSM健康知识信息平台 健康自检平台 健康体检管理系统Java
  9. 计算机体系结构——名词解释
  10. Hexo界面美化_实用插件配置
  11. Golang seelog 使用入门简介
  12. 2021-10-20 推荐一个在线视频格式转换的好网站https://www.zamzar.com/,我测试过mp4转到gif
  13. 十句冥思話--人生感悟
  14. 已解决for example: not eligible for auto-proxying
  15. 形容计算机专业的人词语,形容专业技术好的词语
  16. mybatis配置mybatis.configuration.map-underscore-to-camel-case=true
  17. Finger Names 你知道五根手指的英文名吗?
  18. Vulkan Cascade Shadow Map的故事
  19. 微信开放平台与微信公众平台简介
  20. 数字图像处理_冈萨雷斯_数组索引

热门文章

  1. 新手熊猫烧香学习笔记
  2. int和Integer的区别在哪里
  3. 无重复字符串的排列组合
  4. 按摩师-总预约时间最长
  5. Python给数字前固定位数加零或数字前置保留0
  6. k近邻算法api初步使用
  7. 2021.5.13指导论文
  8. 基础 | 深度学习与神经网络-介绍
  9. mysql创建表语句 引擎、编码和字符集设置
  10. Django详解之models操作