python编写守护进程

  linux环境下通常使用shell来写小脚本守护某个服务,最近强制自己使用python来写管理脚本,在实践中学习python。shell在linux管理方面固然简单便捷,命令行直接调用,但是python可以直接套用模块来实现,比如说打印日志:在shell中我们需要定义日期,打印信息等内容,脚本显得比较乱;而python通过logging模块或其他模块,让我们减少繁琐操作。
  下面我们就使用python监控mongodb的27018端口来体验下:

[test@localhost ~]vim mongo_guard.py
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import commands
import os
import logging

command = 'setsid /usr/local/bin/mongod --port 27018 --master --dbpath /data/mongodb_27018 --logpath /data/mongodb_27018/mongodb27018.log --logappend &'

logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
                datefmt = '%a, %d %b %Y %H:%M:%S',
                filename = os.path.join('/opt/shell/','mongodb.log'),
                filemode = 'a')

#27018
output = commands.getstatusoutput('netstat -ntlp|grep :27018')
status = int(output[0])
if status > 0:
        logging.error('mongo 27018  down')
        os.system(command)
else:
         logging.info('mongo 27018 ok')
#        pass

在此我们调用了2个模块:
commands 执行系统命令,返回命令执行结果,用于检测端口是否存在
os 也是执行系统命令,但是不会返回执行结果
logging 用于打印日志,便于我们记录端口宕掉的时间,以便我们查看

在当前目录下生成的日志mongodb.log如下:

[test@localhost ~]$ cat mongodb.log 
Mon, 02 Nov 2015 16:20:48, mongo_guard.py, ERROR, mongo 27018  down
Mon, 18 Nov 2015 08:45:01, mongo_guard.py, INFO, mongo 27018 ok

以上日志格式如日志,日志级别等我们可以在logging模块自己定义。

注意: 在cron中执行python脚本,有可能出现脚本无法执行的情况,但是直接用在命令行下是可以运行的,这是由于cron的环境问题,我们可以通过在cron中打印日志,查看原因,如
/5 * * * python mongo_guard.py >> log 2>&1
也可以通过在cron中设置环境,如
PATH==/usr/local/jdk/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值