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

使用winsw来将nginx安装为服务()下载地址,

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

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

linux上查看nginx版本_linux查看nginx安装路径_linux查看nginx版本号

linux查看nginx版本号_linux上查看nginx版本_linux查看nginx安装路径

配置文件说明


nginx-1.18.0
Nginx Service
Nginx Service
%BASE%nginx.exe
-s stop
%BASE%logsnginx-service

10240
8

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

linux上查看nginx版本_linux查看nginx版本号_linux查看nginx安装路径

linux查看nginx安装路径_linux查看nginx版本号_linux上查看nginx版本

其中%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安装为服务

linux查看nginx安装路径_linux查看nginx版本号_linux上查看nginx版本

运行指令:nginx-service.exe uninstall

可以卸载已安装的服务

linux上查看nginx版本_linux查看nginx安装路径_linux查看nginx版本号

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

linux查看nginx版本号_linux上查看nginx版本_linux查看nginx安装路径

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

linux查看nginx版本号_linux查看nginx安装路径_linux上查看nginx版本

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

linux上查看nginx版本_linux查看nginx安装路径_linux查看nginx版本号

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

linux查看nginx安装路径_linux查看nginx版本号_linux上查看nginx版本

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

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

2. nginx日志分割

使用该脚本前linux查看nginx安装路径,需要先修改脚本中NGINX_HOME对应的路径:

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

cmd复制代码@echo off
set logPath=D:nginx1.18logs
set date=%date:~0,4%-%date:~5,2%-%date:~8,2%
set backupFolder=D:nginx1.18logsbackup
:: 如果备份目录不存在,则创建该目录
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
                )
            )
        )
    )
)

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688