Windows下关于Nginx自动切割与异地备份

来源:互联网 发布:cnzz数据专家 编辑:程序博客网 时间:2024/05/16 15:26

Windows下关于Nginx自动切割与异地备份

在我们跟踪Nginx的日志时发现,这个Log文件日积月累下来,实在太大了,如果我们需要查找某一天发生的问题,可能要打开>=1G的文件,这实在不是一个很好的选择。为此,我们在Nginx服务器上,创建一个计划任务,让他每天晚上自动备份一份日志,并以当天日期命名,然后备份到指定目录下,让其达到自动切割的目的,以下是详细流程:

1、我们在Nginx\logs的目录下,建立History_Log文件夹
这里写图片描述

继续在History_Log目录下,建立Access和Error文件夹,分别备份Access和Error日志的文件

这里写图片描述

2、Logs目录下的Access.log文件太大,如果要分割今天之前的日志文件,可以将文件压缩回本地,利用其它工具进行分割,在此主要阐述后续的分割方法。我的做法是,将Access.log和Error.log文件压缩备份,并移动到其他目录备份起来:
这里写图片描述

下面我们开始对Nginx日志做三件事情:
1)、将Log日志文件,按照当天日志,备份到本机的C:/nginx-1.10.1/logs/History_Log下
2)、再将Log日志文件,按照当天日志,备份到网络位置(或虚拟目录)下
3)、删除本机30天之后的Log日志备份
自动切割Nging日志:
本地备份目录创建完毕后,用一个批处理让日志每天按照当日时间,自动备份Log日志到备份目录

1、创建一个“自动切割Nginx日志”的bat文件,并输入以下内容:

@echo off

cd C:\nginx-1.10.1

rem 查看系统中正在运行的nginx进程并全部关闭
tasklist /fi “imagename eq nginx.exe”
nginx.exe -s quit
taskkill /fi “imagename eq nginx.EXE” /f

rem 指定log文件的存放路径
set SrcDir=C:\nginx-1.10.1\logs

rem 移动到其他目录,并根据时间重命名访问日志文件
set “cmdstr1=move %SrcDir%\access.log %SrcDir%\History_Log\Access\access.%date:~0,4%-%date:~5,2%-%date:~8,2%.log
call %cmdstr1%”

rem 移动到其他目录,并根据时间重命名错误日志文件
set “cmdstr2=move %SrcDir%\error.log %SrcDir%\History_Log\Error\error.%date:~0,4%-%date:~5,2%-%date:~8,2%.log
call %cmdstr2%”

start nginx
nginx -s re-opening log files

2、验证以上代码可以成功备份后,打开计划任务,创建一个自动运行的Job,我这边设置的是每天晚上23:58分让其自动运行:
这里写图片描述

3、然后第二天就可以来查看结果了

自动备份Nginx日志到网盘:
同时,如果要保存更久的日志文件,建议用一个网盘或比较大的盘,用一个批处理让日志每天按照当日时间,自动备份Log日志到这个网盘,实现异地备份

1、创建一个“自动备份Nginx日志到网盘”的bat文件,并输入以下内容:

rem 查看系统中正在运行的nginx进程
tasklist /fi “imagename eq nginx.exe”

rem 指定log文件的存放路径
set SrcDir=C:\nginx-1.10.1\logs

rem 注意:当异地备份地址是网盘或者虚拟目录时,不能使用映射盘符,虽然手动运行是rem 可以的,但是如果用任务计划运行,就会不成功
rem set SrcBak=Z:\Nginx_Log_backup\10.0.0.10-Nginx(这个地址,计划任务是不识别的)
set SrcBak=\bzonelogfile.file.core.chinacloudapi.cn\syqlogs\Nginx_Log_backup\10.0.0.10-Nginx
set GoaccessBak=\10.0.0.30\c$\Nginx_Log_backup\10.0.0.10-Nginx

rem 备份到网盘,并根据时间重命名访问日志文件

set “accessbak=copy /y %SrcDir%\access.log %SrcBak%\Access\access.%date:~0,4%-%date:~5,2%-%date:~8,2%.log
call %accessbak%”

rem 备份到网盘,并根据时间重命名访问日志文件

set “errorbak=copy /y %SrcDir%\error.log %SrcBak%\Error\error.%date:~0,4%-%date:~5,2%-%date:~8,2%.log
call %errorbak%”

rem 备份到跳板机

set “accessbak=copy /y %SrcDir%\access.log %GoaccessBak%\access.log
call %accessbak%”

set “accessbak=copy /y %SrcDir%\error.log %GoaccessBak%\error.log
call %accessbak%”

2、验证以上代码可以成功备份到网盘后,打开计划任务,创建一个自动运行的Job,我这边设置的是每天晚上23:58分让其自动运行:

3、然后第二天就可以来查看结果了

删除本机指定30天前的log日志:
由于多数本地磁盘空间有限,我们可以选择只保留最近“多少天”的日志文件,比如,超过30天的文件,我们让他自动删除,如果需要查询30天以前的文件,就可以到第二步中的网盘中,去查找

1、创建一个“删除本机指定30天前的log日志”的bat文件,并输入以下内容:

@echo off

rem 指定log文件的存放路径
set SrcDir=C:\nginx-1.10.1\logs\History_Log

rem 指定删除“多少天”之前的文件
set DaysAgo=30

forfiles /p “%SrcDir%\Access” /s /m *.log /d -%DaysAgo% /c “cmd /c del @path”
forfiles /p “%SrcDir%\Error” /s /m *.log /d -%DaysAgo% /c “cmd /c del @path”

2、验证文件可以删除后,打开计划任务,创建一个自动运行的Job,我这边设置的每月1号凌晨3点,自动删除超过30天的Log日志文件

原创粉丝点击