python重构php,python初探-重构日志监控脚本

博客介绍了作者使用Python重写了一个原本使用Shell脚本的Nginx日志监控程序,提高了效率并避免了重复执行。新脚本以守护进程方式运行,每秒检查一次日志,对特定情况进行IP屏蔽,如403状态、指定文件类型访问等。同时,还使用了一个shell脚本进行IP黑名单操作。另外,博客提到了Python与PHP的执行效率比较,以及对Python语法和学习感受的简要评论。
摘要由CSDN通过智能技术生成

花了差不多一周的时候,把python学习了一下,昨天把一直以来非常想重写的nginx日志监控脚本用python重写了一下。重构的原因是原来的shell脚本,是30秒一执行,这样效率太低,并且有重复执行的可能,现在使用守护进程,一秒为一周期,并且可以避免重复执行。

先看代码:

nginx日志监控脚本

Python

#!/usr/bin/python2.6

#coding=utf-8

import os

import time

#日志记录

num_file = '/data/www/www.521php.com/log/num'

log_file = '/data/www/www.521php.com/log/www.521php.com.log'

#ip屏蔽函数

def shellcmd(ip,con):

os.system('/root/shell/nginx/editblocksip.sh add '+ip)

os.system('echo '+con+' | mail -s "log info" zhangcunchao_cn@163.com')

nowfile = os.getcwd()+"/"+__file__

stime = os.stat(nowfile).st_mtime

#修改时间变化退出

while stime == os.stat(nowfile).st_mtime:

log_num = str(int(os.popen("cat "+num_file).read()))

real_num = str(int(os.popen("cat "+log_file+" | wc -l").read()))

if log_num != real_num:

#插入新记录条数

os.system('echo '+real_num+' > '+num_file)

content = os.popen("tail -n +"+log_num+" "+log_file).read().split("\n")

for con in content:

if ""!=con:

c = con.split(' ')

if '403' != c[8] and '112.253.28.43' != c[0]:

if ".rar" in c[6]:

shellcmd(c[0],con)

elif '/wp-comments-post.php' in c[6] and 'MSIE' == c[13] and '6.0;'== c[14]:

shellcmd(c[0],con)

elif '"-"' == c[11] and '"-"' == c[12] and '.php' in c[6]:

shellcmd(c[0],con)

time.sleep(1)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

#!/usr/bin/python2.6

#coding=utf-8

importos

importtime

#日志记录

num_file='/data/www/www.521php.com/log/num'

log_file='/data/www/www.521php.com/log/www.521php.com.log'

#ip屏蔽函数

defshellcmd(ip,con):

os.system('/root/shell/nginx/editblocksip.sh add '+ip)

os.system('echo '+con+' | mail -s "log info" zhangcunchao_cn@163.com')

nowfile=os.getcwd()+"/"+__file__

stime=os.stat(nowfile).st_mtime

#修改时间变化退出

whilestime==os.stat(nowfile).st_mtime:

log_num=str(int(os.popen("cat "+num_file).read()))

real_num=str(int(os.popen("cat "+log_file+" | wc -l").read()))

iflog_num!=real_num:

#插入新记录条数

os.system('echo '+real_num+' > '+num_file)

content=os.popen("tail -n +"+log_num+" "+log_file).read().split("\n")

forconincontent:

if""!=con:

c=con.split(' ')

if'403'!=c[8]and'112.253.28.43'!=c[0]:

if".rar"inc[6]:

shellcmd(c[0],con)

elif'/wp-comments-post.php'inc[6]and'MSIE'==c[13]and'6.0;'==c[14]:

shellcmd(c[0],con)

elif'"-"'==c[11]and'"-"'==c[12]and'.php'inc[6]:

shellcmd(c[0],con)

time.sleep(1)

功能我为了简便,使用了shell命令,editblocksip.sh脚本以前说过,就是操作nginx黑名单用的,此脚本还是受到了写php守护进程的启发,1、每次while循环,判断文件自身是否被修改,如果修改就结束,然后由进程守护shell再启用,2、中间的实现也非常简单,记录最近读取的行号,有新记录产生,就执行监控操作,3、过滤已屏蔽的403状态和自身ip地址,4、然后就是自己需要的一些屏蔽规则,有触发则调用editblocksip.sh,将此ip加入403黑名单,这样用户访问会显示我的403页面。

check_python.sh python进程守护队列代码

Shell

#!/bin/bash

EMAIL='zhangcunchao_cn@163.com'

start()

{

c=`ps w -C python|grep $1|wc -l`

if [ $c -lt 1 ]

then

if [ -f "$1" ];then

/usr/bin/python $1 > /dev/null &

else

`echo 'no such file '$1 | mail -s 'process check error' $EMAIL`

fi

fi

}

BASE_PATH=`dirname $0`"/"

cd $BASE_PATH

start log.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#!/bin/bash

EMAIL='zhangcunchao_cn@163.com'

start()

{

c=`psw-Cpython|grep$1|wc-l`

if[$c-lt1]

then

if[-f"$1"];then

/usr/bin/python$1>/dev/null&

else

`echo'no such file '$1|mail-s'process check error'$EMAIL`

fi

fi

}

BASE_PATH=`dirname$0`"/"

cd$BASE_PATH

startlog.py

原理还是挺简单的,这里我也简单说一下我学习python后对于其感触。

总的来说,python语法上面和php的确有很大区别,其语法其实和js有很大的类似。python最大的特点就是他严格的缩进,他使用缩进来控制代码块,因为其没有{}这样的大括号,变量也和php一样使用了简单的引用计数来做优化,不过其import这样的导入方式其实效率不高,原因大家应该可以理解,我学习过程中还专门做了php和python的执行效率对比,while循环的话php应该比python快一半左右,当然这也不能说明什么,不过python的确是运维工作非常好的助手。

程序本天成,妙手偶得之!我们只是代码的搬运工!

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值