python脚本监听nginx是否运行
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是否运行的更多相关文章
- python hook监听事件
python hook监听事件 作者:vpoet mail:vpoet_sir@163.com # -*- coding: utf-8 -*- # # by oldj http://oldj.net/ ...
- 使用python脚本批量设置nginx站点的rewrite规则
一般情况下,配置rewrite重写规则使用shell脚本即可: 把url拼凑成1,2文件中中的格式,运行 chongxie.sh 即可生成我们需要的rewrite规则 [root@web01:/opt ...
- python 文件监听
对文件进行监听.过滤 def tail(filename): f = open(file=filename, mode='r', encoding='utf-8') # 打开文件不能用with,因为监 ...
- python socketserver监听多端口多进程
多进程监听多端口 # 多线程socket # 程序监听两个端口,端口逻辑相同其中一个端口放在子进程下 # 每次请求会在产生一个进程处理请求 import SocketServer from multi ...
- Python——pyHook监听鼠标键盘事件
pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...
- python pynput监听键盘
"""小白随笔,大佬勿喷""" #键盘输入 from pynput.keyboard import Key,Controller,Liste ...
- Linux开机自启应用&开机执行脚本&监听端口应用挂掉了执行启动脚本
linux开机自启 背景 目前要部署一个spring boot框架的jar包,实现开机启动项目或者应用挂掉了 执行启动脚本 在root目录下有一个启动项目的脚本: app_start.sh app_s ...
- python 脚本在linux环境下运行
有两种方式:1.直接使用python xxxx.py执行.其中python可以写成python的绝对路径.使用which python进行查询.2.在文件的头部(第一行)写上#!/usr/bin/py ...
- zabbix-agent python脚本侦听服务器异常登录,并告警
py脚本 import re,subprocess,time,datetime #gpasswd -a zabbix adm def ftime(a): a = a.replace('Jan','01 ...
随机推荐
- angular项目实现mqtt的订阅与发布 ngx-mqtt
angular项目实现mqtt的订阅与发布 如果要写一个exe可执行文件,可以使用angular编写,然后使用electron打包成一个exe文件. https://github.com/maxime ...
- ES6常用语法,面试应急专用!
常用的ES6语法 注:该文章为转载,原地址为https://www.jianshu.com/p/fb019d7e8b15 什么是ES6? ECMAScript 6(以下简称ES6)是JavaScr ...
- C++11 Lambda函数
Lambda函数 C++11新增了lambda函数,其基本格式如下 [捕捉列表] (参数) mutable -> 返回值类型 {函数体} 说明 []是lambda的引出符,捕捉列表能够捕捉上下文 ...
- DataGridView 更改Header样式
'必须先设置 EnableHeadersVisualStyles 属性 才能设置Header颜色dgv.EnableHeadersVisualStyles = Falsedgv.ColumnHeade ...
- Go字符串
1. 字符串的声明是使用 package main import "fmt" func main() { /* Go中的字符串是一个字节的切片. 可以通过将其内容封装在“”中来创建 ...
- bootstrap的pillbox使用
使用bootstrap的cameo模版,搭建了一个cms系统,使用pillbox做显示的时候,出现点击×失败的问题. 分析了一下pillbox这个控件的使用方法. pillbox的样例在cameo/f ...
- STA之RC网
STA的主要工作是计算电路网络的延时,如今的电路网络还是由CMOS cell和net组成的,所以STA所要计算的延时仍是电容的充放电时间.等量子计算机普及的时候,如今的这一套理论都将随着科技的进步被丢 ...
- C/C++编程规范
1.文件结构 C/C++程序通常分为两个文件,一个文件用于保存程序的声明,一个文件用于保存程序的实现. 1.1 版权和版本的声明 版权和版本的声明位于头文件和定义文件的开头,主要内容有:(1)版权信息 ...
- AtCoder AGC038 C-LCMs 题解
题目链接:https://agc038.contest.atcoder.jp/tasks/agc038_c?lang=en 题意:给定一个数组,求这个数组中所有数对的LCM之和. 分析:网上看到了很多 ...
- Mac上通过docker配置PHP开发环境
这篇文章介绍的内容是关于Mac上通过docker配置PHP开发环境,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 更多PHP相关知识请关注我的专栏PHPzhuanlan.zhihu. ...