JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Linux日常小技巧nginx日志分割 nginx 日志文件

wys521 2024-10-03 03:40:48 精选教程 41 ℃ 0 评论

nginx日志分割防止日志过大而影响我们对日志的查看,今天给大家分享一个我在工作中作的一个windows的nginx日志分割具体步骤如下:

使用winsw来将nginx安装为服务(https://github.com/winsw/winsw)下载地址,

1. 从官网下载WinSW.NET2.exe文件,并重命名为nginx-service.exe;

2. 新建nginx-service.xml文件,并根据配置文件说明来编写配置参数。



配置文件说明

<service>
<id>nginx-1.18.0</id>
<name>Nginx Service</name>
<description>Nginx Service</description>
<executable>%BASE%\nginx.exe</executable>
<stoparguments>-s stop</stoparguments>
<logpath>%BASE%\logs\nginx-service</logpath>
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
</service>


与windows服务的对应关系如下:




其中%BASE%表示的是exe文件所在的目录,所以为了以上配置能正常生效,需要将exe文件、xml配置文件都放在nginx的根目录中

stoparguments表示停止windows服务时执行指令的参数,与executable结合起来就是:nginx.exe -s stop

log参数配置的是winsw的运行日志,一般包括安装、卸载服务、服务运行等信息,其中sizeThreshold表示日志文件的最大存储值,keepFiles表示最多保留多少个日志文件。

1. 安装服务

将nginx-service.exe以及配置好的nginx-service.xml文件拷贝到nginx根目录后,打开命令行窗口,切换到当前目录

如下,输入nginx-service.exe -h,可以看到winsw可以使用的各种指令



运行指令:nginx-service.exe install

可以将当前目录下的nginx安装为服务



运行指令:nginx-service.exe uninstall

可以卸载已安装的服务


但是nginx以服务运行后会出现一个问题,当执行nginx -s reload重新加载指令,或nginx -s stop停止指令时,会出现以下错误:


这是因为nginx服务是以“本地系统”的登录方式运行的,当前用户没有权限对它的服务进程进行操作,


为了解决这个问题,需要打开如下所示的服务“属性”弹窗,选择“登录”选项卡选择登录身份为“此账户”并选择当前登录系统的用户,输入相应的密码。


配置完成后,可以看到Nginx对应的服务已经“登录为”设置的用户了


然后重启Nginx服务,nginx的指令也可以顺利执行了

这里费劲解决这个问题,主要是因为nginx服务的重启是:停止+启动的过程,并不会像nginx -s reload一样在启动之前检查配置文件是否正确。

2. nginx日志分割

使用该脚本前,需要先修改脚本中NGINX_HOME对应的路径:

Windows 系统下使用 cmd 编写的 nginx 日志分割脚本:

cmd复制代码@echo off
set logPath=D:\nginx1.18\logs
set date=%date:~0,4%-%date:~5,2%-%date:~8,2%
set backupFolder=D:\nginx1.18\logs\backup

:: 如果备份目录不存在,则创建该目录
if not exist %backupFolder% mkdir %backupFolder%

:: 找到所有日志文件并复制到备份目录
for %%i in (%logPath%\*.log) do (
    for /f "tokens=1-3 delims=." %%a in ("%%~ni") do (
        if not "%%c"=="" (
            if %%b==%date% (
                copy "%%~fi" "%backupFolder%\%%a_%%b.%%c"
            )
        ) else (
            if %%a==access (
                if %%b==%date% (
                    copy "%%~fi" "%backupFolder%\access_%%b.log"
                )
            )
        )
    )
)

:: 清空日志文件
for %%i in (%logPath%\*.log) do (
    for /f "tokens=1-3 delims=." %%a in ("%%~ni") do (
        if not "%%c"=="" (
            if %%b==%date% (
                >"%%~fi" type nul
            )
        ) else (
            if %%a==access (
                if %%b==%date% (
                    >"%%~fi" type nul
                )
            )
        )
    )
)

整理不易,欢迎点赞,收藏,转发,关注我每天分享一下运维小知识。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表