import sys
import time
import os
import logging
from logging.handlers import RotatingFileHandler
import config class Nginx_listen(object):
logger = None
@property
def setup_log(self):
return self.logger
@setup_log.setter
def setup_log(self,log_name):
"""创建日志配置"""
logger = logging.getLogger(log_name)
log_path = os.path.join(config.log_path,log_name)
logger.setLevel(logging.INFO)
file_handler = RotatingFileHandler(
log_path, 'a', config.MAX_BYTE, config.BACKUP_COUNT
)
file_handler.setFormatter(
logging.Formatter(
"[%(asctime)s] [%(process)d] [%(levelname)s] - %(module)s.%(funcName)s (%(filename)s:%(lineno)d) - %(message)s"
)
)
logger.addHandler(file_handler)
self.logger = logger
@staticmethod
def write_pid(pid):
"""nginx的进程id写入文件"""
with open(config.pid_path,'w') as fp:
fp.write("%s\n"%pid)
@staticmethod
def read_pid():
"""读取保存文件内nginx的进程id"""
with open(config.pid_path, 'r') as fp:
pid = fp.read().strip()
return pid
def check_nginx_pid(self):
"""获取启动nginx 的进程id"""
current_pid = os.popen("sudo pgrep -lo nginx |grep -v grep|awk '{print $1}'").read()
if current_pid:
self.write_pid(current_pid)
return current_pid def check_nginx_run(self):
"""检查nginx是否启动"""
status = False
nginx_pid = self.check_nginx_pid()
nginx_start_data = os.popen("sudo ps aux|grep nginx |grep -v grep|awk 'NR==1{print $9}'").read()
nginx_path = os.popen("sudo ps aux|grep nginx |grep -v grep|awk 'NR==1{print $14}'").read()
current_date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
if nginx_pid and nginx_path:
self.logger.info("current_time: %s;startime: %s;nginx_path: %s;pid: %s" %
(current_date,nginx_start_data,nginx_path,nginx_pid)
)
status = True
else:
dead_pid = self.read_pid()
self.logger.warning("current_time: %s; nginx is dead, nginx pid is %s try restart nginx." %
(current_date,dead_pid)
)
return status
def start_nginx(self):
"""启动nginx"""
cmd = "/usr/sbin/nginx"
cmd_result = os.system(cmd)
if cmd_result == 0:
self.check_nginx_run()
else:
self.logger.error("start nginx error")
@staticmethod
def main(log_name):
"""入口文件"""
nginx_obj = Nginx_listen()
nginx_obj.setup_log = log_name
result = nginx_obj.check_nginx_run()
if result:
sys.exit(0)
else:
nginx_obj.start_nginx()
log_name = "nginx"
nginx_obj = Nginx_listen().main(log_name)

python脚本监听nginx是否运行的更多相关文章

  1. python hook监听事件

    python hook监听事件 作者:vpoet mail:vpoet_sir@163.com # -*- coding: utf-8 -*- # # by oldj http://oldj.net/ ...

  2. 使用python脚本批量设置nginx站点的rewrite规则

    一般情况下,配置rewrite重写规则使用shell脚本即可: 把url拼凑成1,2文件中中的格式,运行 chongxie.sh 即可生成我们需要的rewrite规则 [root@web01:/opt ...

  3. python 文件监听

    对文件进行监听.过滤 def tail(filename): f = open(file=filename, mode='r', encoding='utf-8') # 打开文件不能用with,因为监 ...

  4. python socketserver监听多端口多进程

    多进程监听多端口 # 多线程socket # 程序监听两个端口,端口逻辑相同其中一个端口放在子进程下 # 每次请求会在产生一个进程处理请求 import SocketServer from multi ...

  5. Python——pyHook监听鼠标键盘事件

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...

  6. python pynput监听键盘

    """小白随笔,大佬勿喷""" #键盘输入 from pynput.keyboard import Key,Controller,Liste ...

  7. Linux开机自启应用&开机执行脚本&监听端口应用挂掉了执行启动脚本

    linux开机自启 背景 目前要部署一个spring boot框架的jar包,实现开机启动项目或者应用挂掉了 执行启动脚本 在root目录下有一个启动项目的脚本: app_start.sh app_s ...

  8. python 脚本在linux环境下运行

    有两种方式:1.直接使用python xxxx.py执行.其中python可以写成python的绝对路径.使用which python进行查询.2.在文件的头部(第一行)写上#!/usr/bin/py ...

  9. zabbix-agent python脚本侦听服务器异常登录,并告警

    py脚本 import re,subprocess,time,datetime #gpasswd -a zabbix adm def ftime(a): a = a.replace('Jan','01 ...

随机推荐

  1. PHP中spl_autoload_register()函数用法实例详解

    本文实例分析了PHP中spl_autoload_register()函数用法.分享给大家供大家参考,具体如下: 在了解这个函数之前先来看另一个函数:__autoload. 一.__autoload 这 ...

  2. DB技能数据库里把技能伤害调整

    1. MagID 技能代号 2. MagName 技能名称 3. Effect Type 效果类型(使用技能时角色的动作效果) 4. Effect 效果(技能产生的动画效果) 5. Spell 每次耗 ...

  3. 搭建Hexo一键生成,同步部署

    全网最全小白搭建Hexo+Gitee/Coding/Github 全网最全小白搭建Hexo+Gitee/Coding/Github 本站内容已全部转移到https://www.myyuns.ltd,具 ...

  4. 执行ifconfig eth2 up命令报错eth2: unknown interface: No such device的解决思路

    排查问题思路 一般出现这种状况都是网卡mac地址错误引起的!要么网卡配置文件中的mac地址不对,要么/etc/udev/rules.d/70-persistent-net.rules文件中的mac地址 ...

  5. Linux之Socket编程

    1.什么是Socket? socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模 ...

  6. spring controller中默认转发、forward转发、redirect转发之间的区别

    默认转发 @RequestMapping("/123") public String test(HttpSession session) { System.out.println( ...

  7. 概率dp poj 2151

    题意: 这道题目的意思很简单,有t个ACM队,m个题目,题目给出了每个队对每个题目做出的概率大小(0到1之间,包含0和1),要求每个队至少做出一道题(签到题),同时,要求获胜队必须至少能够做出n道题( ...

  8. v:bind指令对于传boolean值的注意之处

    1,

  9. C#中的注释

    帮助程序员便于阅读代码 单行注释 // 多行注释 /* * */ 文档注释 /// <summary> /// ... /// <summary>

  10. 那些年做过的ctf之加密篇(加强版)

    MarkdownPad Document *:first-child { margin-top: 0 !important; } body>*:last-child { margin-botto ...