您的位置:首页 > 运维架构 > Tomcat

nginx、tomcat、php日志轮转程序

2018-02-27 14:13 295 查看

nginx、tomcat、php日志轮转程序

为了按分类自定义轮转的文件,所以写了如下代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __author__ = 'xiaojinsong'
# __time__ = '2018/2/26'

import os, sys, time, datetime
import tarfile, re

yesday = datetime.datetime.now() - datetime.timedelta(days=1)
logday = yesday.strftime('%Y-%m-%d')

def nginx_rotate(logdir):
backdir = os.path.join('/apps/logs/backup/', sys.argv[1], logday)
if not os.path.isdir(backdir):
os.makedirs(backdir)
for root, dir, files in os.walk(logdir):
dir[:] = []
os.chdir(root)
for file in files:
if re.search(r'.*\.log$', file) and os.path.getsize(file) > 0:
try:
t = tarfile.open(os.path.join(backdir, file + 'tar.gz'), 'w:gz')
t.add(file)
t.close()
except Exception as e:
print(e)
finally:
os.remove(file)

def tomcat_rotate(logdir):
backdir = os.path.join('/apps/logs/backup/', sys.argv[1], logday)
if not os.path.isdir(backdir):
os.makedirs(backdir)
for root, dirs, files in os.walk(logdir):
# print(root,dirs,files)
for dir in dirs:
if dir == 'logs':
tempdir = os.path.join(root, dir)
for rootson, dirson, fileson in os.walk(tempdir):
for file in fileson:
filedir = os.path.join(rootson, file)
# print(filedir)
obj = re.match(r'/apps/svr/server/(.+)/logs/.+\d+(.*)\.(log|txt)$', filedir, re.I)

if obj:
# print(obj.group(0))
dst_dir = os.path.join(backdir, obj.group(1))
if not os.path.isdir(dst_dir):
os.makedirs(dst_dir)
if os.path.getsize(filedir) > 0:
os.chdir(os.path.dirname(filedir))
try:
t = tarfile.open(os.path.join(dst_dir, file + 'tar.gz'), 'w:gz')
t.add(file)
t.close()
except Exception as e:
print(e)
finally:
os.remove(file)

# 只支持日志目录只有一层子目录,暂不支持多目录
def php_rotate(logdir):
backdir = os.path.join('/apps/logs/backup/', sys.argv[1], logday)
if not os.path.isdir(backdir):
os.makedirs(backdir)
filelist = []
for root, dirs, files in os.walk(logdir):
# print(root, dirs, files)
if dirs:
for file in os.listdir(root):
tempfile = os.path.join(root, file)
if os.path.isfile(tem
4000
pfile) and os.path.getsize(tempfile) > 0:
os.chdir(os.path.dirname(tempfile))
try:
t = tarfile.open(os.path.join(backdir, file + 'tar.gz'), 'w:gz')
t.add(file)
t.close()
except Exception as e:
print(e)
finally:
os.remove(file)

for dir1 in dirs:
tempdir = os.path.join(root, dir1)
dst_dir = os.path.join(backdir, dir1)
# print(dst_dir)
if not os.path.isdir(dst_dir):
os.makedirs(dst_dir)
for file in os.listdir(tempdir):
filedir = os.path.join(tempdir, file)
os.chdir(os.path.dirname(filedir))
try:
t = tarfile.open(os.path.join(dst_dir, file + 'tar.gz'), 'w:gz')
t.add(file)
t.close()
except Exception as e:
print(e)
finally:
os.remove(file)

def main():
if sys.argv[1] == 'nginx':
nginx_rotate('/apps/logs/nginx')
try:
os.system('kill -USR1 `cat /apps/logs/nginx/nginx.pid`')
except Exception as e:
print(e)
elif sys.argv[1] == 'tomcat':
tomcat_rotate('/apps/svr/server/')
elif sys.argv[1] == 'php':
php_rotate('/apps/logs/php')
else:
print('This program must at lest on parameter')

if __name__ == '__main__':
main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python  运维