在Windows上记录nginx的旋转

时间:2010-08-21 02:19:57

标签: windows nginx signals logging rotation

我在网上发现了很多用于在linux下旋转nginx日志的引用。只需将USR1信号发送到进程即可。但是......在Windows上不存在unix信号,我无法找到任何相关信息。如何在Windows上使用nginx完成同样的事情?

6 个答案:

答案 0 :(得分:6)

要在Windows中旋转nginx日志,创建一个批处理文件,就像这样:

For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set YMD=%%c-%%a-%%b)
move C:\path\to\nginx\logs\Access.log C:\path\to\nginx\logs\Access_%YMD%.log
move C:\path\to\nginx\logs\Error.log C:\path\to\nginx\logs\Error_%YMD%.log
call C:\path\to\nginx\nginx -p C:\path\to\nginx -s reopen

第一行只创建一个时间戳(信用额度为Jay

然后在Windows中创建计划任务以运行该批处理文件,以便您经常轮换日志。

如果nginx作为服务运行(例如通过描述here的Windows Service Wrapper),您不能直接调用nginx -s reopen之类的nginx命令。相反,您必须以运行服务的用户身份运行命令。

要执行此操作,创建名为nginx的新用户(例如),将服务和计划任务配置为以该用户身份运行。您还必须确保您的用户具有“Logon as a batch job”权限。

如果要在命令行上测试旋转脚本而不必使用计划任务,可以使用

runas /user:nginx "C:\path\to\rotateLogs.bat"

答案 1 :(得分:5)

实际上,(尽管有大量的谷歌搜索),答案可以直接找到in the doc pages

命令是:

nginx -s reopen

但是这只能在从命令行运行nginx时起作用 - 目前是目前在Windows上运行nginx的唯一官方方式。

我的下一个挑战是如何在将nginx作为Windows服务运行时弄清楚如何工作:Nginx Windows Service

答案 2 :(得分:1)

1.首先创建一个文件来存储你的日志文件列表,比如“nginx_log.lst”,内容为:

  

d:\项目\ example.com \数据\日志\的access.log   d:\项目\ example.com \数据\日志\ error.log中

2.将以下内容保存到bat文件中,例如“nginx_log_rotate.bat”:

@echo off
set YMD=%date:~0,4%%date:~5,2%%date:~8,2%
set LOG_FILE=
FOR /F "eol=; delims=, " %%i in (nginx_log.lst) do (
    echo "%%i"
    move "%%i" "%%i.%YMD%"
)
pushd C:\tools\nginx
nginx -s reopen
popd
pause
@echo on

3。根据需要创建一个计划任务来运行球棒

答案 3 :(得分:0)

我写了一个小实用程序,它在stoppig nginx(作为windows服务运行)之后旋转日志文件几秒钟。

它有特定要求停止,然后复制日志文件,然后重新启动服务。您可以下载代码并以任何方式进行更改。

代码在这里:http://mandar.tumblr.com/post/5419161330/nginx-logrotate-windows

由于

答案 4 :(得分:0)

出于某些原因,批处理文件对我有用。

For /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set YMD=%%c-%%a-%%b)
move .\logs\access.log .\logs\access.%YMD%.log
move .\logs\error.log .\logs\error.%YMD%.log
nginx.exe -s reload

它与上面的Tom's answer差不多。

答案 5 :(得分:0)

@echo off
SET DATE_FRM=%date%

REM set path of Nginx root folder.
SET NGINX_PATH="E:\nginx-1.14.2"

REM create old_logs folder if not exists , we will move old logs in this folder.
if not exist "%NGINX_PATH%\old_logs\NUL" mkdir "%NGINX_PATH%\old_logs"

REM move error.log in old_logs from logs folder and rename it
move %NGINX_PATH%\logs\access.log %NGINX_PATH%\old_logs\access_%DATE_FRM%.log
move %NGINX_PATH%\logs\error.log %NGINX_PATH%\old_logs\error_%DATE_FRM%.log

REM reopn nginx logs, this will create new error.log for nginx.
call %NGINX_PATH%\nginx -p %NGINX_PATH% -s reopen

REM compress error%DATE_FRM%.log, this will create error_%DATE_FRM%.log.zip file.
powershell Compress-Archive -Path %NGINX_PATH%\old_logs\access_%DATE_FRM%.log -DestinationPath %NGINX_PATH%\old_logs\access_%DATE_FRM%.log.zip -force
powershell Compress-Archive -Path %NGINX_PATH%\old_logs\error_%DATE_FRM%.log -DestinationPath %NGINX_PATH%\old_logs\error_%DATE_FRM%.log.zip -force

REM delete error%DATE_FRM%.log from old_logs.
del %NGINX_PATH%\old_logs\access_%DATE_FRM%.log
del %NGINX_PATH%\old_logs\error_%DATE_FRM%.log