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