Nginx日志輪轉(zhuǎn)與定時(shí)啟動(dòng)腳本的實(shí)現(xiàn)
Windows 下 Nginx 日志不會(huì)自動(dòng)輪轉(zhuǎn),長期運(yùn)行會(huì)導(dǎo)致 access.log 和 error.log 文件越來越大,影響排查和磁盤空間。Nginx 本身不提供 Windows 下的日志切割功能,需借助批處理腳本 + Windows 任務(wù)計(jì)劃程序?qū)崿F(xiàn)日志輪轉(zhuǎn)與服務(wù)管理。
日志輪轉(zhuǎn)腳本(rotate-logs.bat)
該腳本將當(dāng)前日志重命名(按日期),并通知 Nginx 重新打開日志文件(通過發(fā)送 nginx -s reopen)。
- 確保 Nginx 已以 Windows 服務(wù)方式安裝(如用 nginx-service.exe 或 NSSM),否則 -s reopen 可能失敗
- 腳本需在 Nginx 安裝目錄下運(yùn)行(或修改路徑為絕對路徑),例如:C:\nginx
- 使用 %date:~0,4%%date:~5,2%%date:~8,2% 獲取格式化日期(如 20240615),適配大多數(shù)系統(tǒng)區(qū)域設(shè)置
示例腳本內(nèi)容(保存為 rotate-logs.bat):
@echo off
setlocal enabledelayedexpansion
set "NGINX_DIR=C:\nginx"
set "LOG_DIR=%NGINX_DIR%\logs"
set "DATESTR=%date:~0,4%%date:~5,2%%date:~8,2%"
if not exist "%LOG_DIR%" exit /b
rem 備份 access.log
if exist "%LOG_DIR%\access.log" (
move "%LOG_DIR%\access.log" "%LOG_DIR%\access_%DATESTR%.log" >nul
)
rem 備份 error.log
if exist "%LOG_DIR%\error.log" (
move "%LOG_DIR%\error.log" "%LOG_DIR%\error_%DATESTR%.log" >nul
)
rem 通知 Nginx 重新打開日志(要求 nginx 正在運(yùn)行)
cd /d "%NGINX_DIR%"
nginx -s reopen 2>nul
echo Log rotated: %DATESTR%定時(shí)啟動(dòng)/重啟 Nginx 腳本(start-nginx.bat)
適用于開機(jī)未自動(dòng)啟動(dòng)、或需每日固定時(shí)間拉起服務(wù)的場景。腳本先嘗試停止殘留進(jìn)程,再啟動(dòng)主程序。
- 避免重復(fù)啟動(dòng)多個(gè) nginx 實(shí)例(檢查 tasklist 中是否存在 nginx.exe)
- 若使用 Windows 服務(wù)方式部署,建議直接用 net start nginx 替代手動(dòng)啟動(dòng)
- 啟動(dòng)后可加短暫停頓(timeout /t 2 >nul),再檢查端口(如 80)是否監(jiān)聽,增強(qiáng)健壯性
示例腳本(start-nginx.bat):
@echo off
set "NGINX_DIR=C:\nginx"
rem 檢查并結(jié)束舊進(jìn)程
tasklist /fi "imagename eq nginx.exe" | findstr /i "nginx.exe" >nul
if %errorlevel% equ 0 (
echo Stopping existing nginx...
%NGINX_DIR%\nginx.exe -s stop >nul 2>&1
timeout /t 1 >nul
)
rem 啟動(dòng) Nginx
echo Starting nginx...
cd /d "%NGINX_DIR%"
start nginx.exe
timeout /t 2 >nul
echo Nginx started.配置 Windows 任務(wù)計(jì)劃程序
讓上述腳本每天凌晨執(zhí)行日志輪轉(zhuǎn),并在開機(jī)/指定時(shí)間啟動(dòng)服務(wù)。
- 打開“任務(wù)計(jì)劃程序”,創(chuàng)建基本任務(wù) → 設(shè)置名稱、觸發(fā)器(如“每天”“02:00”)、操作(啟動(dòng)程序 → 選擇 .bat 文件)
- 在“常規(guī)”選項(xiàng)卡中勾選“不管用戶是否登錄都要運(yùn)行”和“不存儲(chǔ)密碼”(需改用本地系統(tǒng)賬戶或配置憑據(jù))
- 若腳本涉及服務(wù)控制(如 net start),務(wù)必勾選“使用最高權(quán)限運(yùn)行”
- 測試任務(wù):右鍵任務(wù) → “運(yùn)行”,觀察日志目錄是否生成新文件、Nginx 是否響應(yīng)正常
補(bǔ)充建議與注意事項(xiàng)
提升穩(wěn)定性與可維護(hù)性的小技巧:
- 在 nginx.conf 的 http 或 server 塊中,可添加 log_format 自定義日志結(jié)構(gòu),便于后續(xù)分析
- 輪轉(zhuǎn)腳本中可加入日志保留天數(shù)邏輯(如用 forfiles 刪除 30 天前的舊日志)
- 避免將日志寫入系統(tǒng)盤根目錄;建議將 logs 目錄映射到其他磁盤分區(qū)
- 首次部署后,手動(dòng)運(yùn)行一次腳本確認(rèn)路徑、權(quán)限、nginx 狀態(tài)均正常,再交由計(jì)劃任務(wù)托管
到此這篇關(guān)于Nginx日志輪轉(zhuǎn)與定時(shí)啟動(dòng)腳本的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx日志輪轉(zhuǎn)與定時(shí)啟動(dòng)腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx如何配置根據(jù)路徑轉(zhuǎn)發(fā)詳解
Nginx是作為一個(gè)反向代理,轉(zhuǎn)發(fā),和負(fù)載均衡的服務(wù)器,也可以用于分布式,下面這篇文章主要給大家介紹了關(guān)于Nginx如何配置根據(jù)路徑轉(zhuǎn)發(fā)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
PHP開發(fā)框架kohana3.3.1在nginx下的偽靜態(tài)設(shè)置例子
這篇文章主要介紹了PHP開發(fā)框架kohana3.3.1在nginx下的偽靜態(tài)設(shè)置例子,kohana曾經(jīng)是codeigniter框架的衍生版,后來發(fā)展成另一個(gè)獨(dú)立的PHP5開發(fā)框架,需要的朋友可以參考下2014-07-07
nginx做代理轉(zhuǎn)發(fā)前端請求到后端的代碼示例
Nginx作為反向代理服務(wù)器,可以有效處理請求并轉(zhuǎn)發(fā)到后端服務(wù)器,這篇文章主要介紹了nginx做代理轉(zhuǎn)發(fā)前端請求到后端的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
nginx如何實(shí)現(xiàn)同個(gè)ip、端口訪問不同的項(xiàng)目(以路徑區(qū)分項(xiàng)目)
這篇文章主要介紹了nginx如何實(shí)現(xiàn)同個(gè)ip、端口訪問不同的項(xiàng)目(以路徑區(qū)分項(xiàng)目),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
nginx 關(guān)閉默認(rèn)站點(diǎn)的方法
國內(nèi)機(jī)房一般都要求網(wǎng)站主關(guān)閉空主機(jī)頭,防止未備案的域名指向過來造成麻煩2012-09-09

