nginx日志切割

# -*- coding: utf-8 -*-

import os
import shutil
from datetime import datetime, timedelta

yesterday = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
year = yesterday.split("-")[0]
month = yesterday.split("-")[1]
day = yesterday.split("-")[2]
# 日志路径
dirpath = '/nginx/logs'
y_m_path = dirpath + "/" + year + "/" + month

# 获取目录下的所有文件和目录
file_all = os.listdir(dirpath)
file_list = []


def bak_path():
    """
    判断文件是否存在不存在则创建
    :return:
    """
    if not os.path.exists(y_m_path):
        os.makedirs(y_m_path)


def file_status():
    """
    判断是否是文件,如果是文件且不为空,则拼接好路径并追加到列表中
    :return:
    """
    for i in file_all:
        file_path = os.path.join(dirpath, i)
        # if os.path.isfile(file_path):
        if ".log" in i:
            if os.path.getsize(file_path):
                file_list.append(file_path)


def mv_file():
    """
    移动日志到备份目录
    :return:
    """
    for i in file_list:
        file_name = os.path.split(i)[1].split('.')[0]
        shutil.move(i, y_m_path + "/" + file_name + "_" + "%s%s%s.log" % (year, month, day))


def nginx_pid():
    os.system('kill -USR1 `cat /var/run/nginx.pid`')


if __name__ == '__main__':
    bak_path()
    file_status()
    mv_file()
    nginx_pid()

posted @   追梦nan  阅读(35)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2019-10-28 Form组件
2019-10-28 中间件
2019-10-28 跨域
2019-10-28 ORM中的锁和事务
2019-10-28 cookie和session
2019-10-28 之Ajax
点击右上角即可分享
微信分享提示