当前位置: 首页 > news >正文

win Nginx运维脚本

@echo off chcp 65001 >nul 2>&1 title "Nginx 快速管理助手" setlocal enabledelayedexpansion set "NGINX_DIR=%~dp0" set "NGINX_DIR=%NGINX_DIR:~0,-1%" :MENU cls echo "==========================================" echo " Nginx 快速管理助手" echo "==========================================" echo "当前工作目录: %NGINX_DIR%" echo "------------------------------------------" echo '[1] 启动 Nginx' echo '[2] 停止 Nginx (优雅退出)' echo '[3] 强制停止 Nginx' echo '[4] 重启 Nginx (平滑重载配置)' echo '[5] 彻底重启 (强制停止后重新启动)' echo '[6] 查看运行状态' echo '[7] 测试配置文件语法' echo '[0] 退出' echo '==========================================' set /p "choice=请输入选项并按回车: " if "%choice%"=="1" goto START if "%choice%"=="2" goto STOP if "%choice%"=="3" goto FORCE_STOP if "%choice%"=="4" goto RELOAD if "%choice%"=="5" goto RESTART if "%choice%"=="6" goto STATUS if "%choice%"=="7" goto TEST_CONF if "%choice%"=="0" exit /b echo "输入无效,请按任意键重试..." pause >nul goto MENU :START echo. echo "[正在检查状态...]" :: 使用 findstr /C 精确匹配进程名,防止匹配到其他包含 nginx 字符的进程 tasklist /NH /FI "IMAGENAME eq nginx.exe" | findstr /i /C:"nginx.exe" >nul 2>&1 if %errorlevel% equ 0 ( echo "[提示] Nginx 已经在运行中,无需重复启动。" ) else ( echo "[正在启动 Nginx...]" cd /d "%NGINX_DIR%" :: 直接使用 nginx.exe 启动,它会自行转入后台运行,不会产生额外弹窗 start "" /B nginx.exe :: 增加循环检测,最多尝试5次,每次间隔1秒,解决进程启动延迟问题 set "retry_count=0" :CHECK_LOOP timeout /t 1 /nobreak >nul tasklist /NH /FI "IMAGENAME eq nginx.exe" | findstr /i /C:"nginx.exe" >nul 2>&1 if %errorlevel% equ 0 ( echo "[成功] Nginx 已在后台启动。" goto START_SUCCESS ) set /a retry_count+=1 if !retry_count! LSS 5 goto CHECK_LOOP :: 如果循环结束仍未检测到进程,判定为启动失败,并自动打印错误日志 echo "[失败] 启动超时,Nginx 进程未正常驻留。" echo "------------------------------------------" echo "最新错误日志摘要 (logs/error.log):" if exist "logs\error.log" ( powershell -Command "Get-Content 'logs\error.log' -Tail 10 -Encoding UTF8" ) else ( echo "未找到 logs\error.log 文件。" ) echo "------------------------------------------" echo "常见原因: 80/443端口被占用(IIS/Skype/其他Web服务)或配置文件语法错误。" ) :START_SUCCESS pause >nul goto MENU :: "2号 优雅停止 优化方案:增加循环检测与最终状态裁决" :STOP echo. echo "[正在执行优雅停止...]" tasklist /NH /FI "IMAGENAME eq nginx.exe" | findstr /i /C:"nginx.exe" >nul 2>&1 if %errorlevel% neq 0 ( echo "[提示] Nginx 当前未运行,无需停止。" ) else ( cd /d "%NGINX_DIR%" :: 发送优雅退出信号,Nginx 主进程会等待 worker 处理完请求再退出 nginx.exe -s quit >nul 2>&1 echo "[等待进程退出...]" set "wait_count=0" :STOP_LOOP timeout /t 1 /nobreak >nul :: 再次检查进程是否存在 tasklist /NH /FI "IMAGENAME eq nginx.exe" | findstr /i /C:"nginx.exe" >nul 2>&1 if %errorlevel% neq 0 ( echo "[成功] Nginx 已优雅停止,所有进程已清理。" goto STOP_END ) set /a wait_count+=1 :: 最多等待 10 秒,防止无限循环 if !wait_count! LSS 10 goto STOP_LOOP :: 循环结束仍未退出,进行最终状态裁决 echo "------------------------------------------" echo "[注意] 优雅停止等待超时 (10秒)。" tasklist /FI "IMAGENAME eq nginx.exe" echo "------------------------------------------" echo "当前 Nginx 仍在运行,通常有以下两种情况:" echo "1. 仍有未处理完的请求(如长连接、大文件传输),Nginx 正在安全收尾。" echo "2. 进程发生死锁或卡死,无法正常响应退出信号。" echo "建议:若无重要业务运行,请输入 [3] 强制停止以清理残留进程。" ) :STOP_END pause >nul goto MENU :FORCE_STOP echo. echo "[正在强制终止进程...]" tasklist /NH /FI "IMAGENAME eq nginx.exe" | findstr /i "nginx.exe" >nul 2>&1 if %errorlevel% neq 0 ( echo "[提示] Nginx 当前未运行。" ) else ( taskkill /F /T /IM nginx.exe >nul 2>&1 echo "[成功] 所有 Nginx 进程已强制终止。" ) pause >nul goto MENU :RELOAD echo. echo "[正在平滑重载配置...]" tasklist /NH /FI "IMAGENAME eq nginx.exe" | findstr /i "nginx.exe" >nul 2>&1 if %errorlevel% neq 0 ( echo "[警告] Nginx 未运行,无法重载配置。是否现在启动?(Y/N)" set /p "confirm=" if /i "!confirm!"=="Y" goto START goto MENU ) else ( cd /d "%NGINX_DIR%" nginx.exe -s reload >nul 2>&1 echo "[成功] 配置重载指令已发送。" ) pause >nul goto MENU :RESTART echo. echo "[正在执行彻底重启...]" call :FORCE_STOP timeout /t 1 /nobreak >nul call :START goto MENU :STATUS echo. echo "[当前 Nginx 进程状态:]" echo "------------------------------------------" tasklist /FI "IMAGENAME eq nginx.exe" echo "------------------------------------------" tasklist /NH /FI "IMAGENAME eq nginx.exe" | findstr /i "nginx.exe" >nul 2>&1 if %errorlevel% neq 0 ( echo "[提示] 未找到运行中的 Nginx 进程。" ) else ( echo "[提示] 正常运行存在主进程+工作进程。" ) pause >nul goto MENU :TEST_CONF echo. echo "[正在测试配置文件语法...]" cd /d "%NGINX_DIR%" nginx.exe -t if %errorlevel% equ 0 ( echo "[成功] 配置文件语法正确。" ) else ( echo "[错误] 配置文件存在语法错误,请修改后重试。" ) pause >nul goto MENU
http://www.jsqmd.com/news/865322/

相关文章:

  • 2026 版权音乐平台测评:8 个小众高质商用配乐网站,告别配乐同质化与侵权 - Fzzf_23
  • 2026学数据分析对产品岗位的价值分析
  • Sunshine游戏串流完全指南:打造你的专属云游戏平台
  • 微软逐步淘汰 SMS 身份验证,通行密钥带来更强安全保障!
  • 2026南京黄金回收综合星级权威榜单|全品类甄选,奢响佳稳居榜首 - 天天生活分享日志
  • Chrome DevTools MCP 被大量 clone 后,真正的信号不是热度,而是验收链路
  • 2026年OpenClaw多实例统一管理平台哪家好?能审计OpenClaw操作行为的平台推荐 - 品牌2025
  • 广元黄金回收2026年5月盘点 六家机构数据横评 福运来领先 - 黄金回收
  • 杭州精日科技有限公司2026直流电源设备优选:直流稳压电源/直流可调电源定制厂家推荐杭州精日科技 - 栗子测评
  • 10分钟搭建个人游戏云:Sunshine开源游戏串流服务器完全指南
  • 惊了!原来毕业论文有这操作?2026降AI率软件推荐合集
  • 点云体积计算
  • 2026铝型材氧化电源选型攻略:选对设备避坑指南 - 品牌优选官
  • QtScrcpy键鼠映射实战指南:5分钟打造专业级手机游戏控制体验
  • 沉香手串买什么牌子成市场关注焦点 - 资讯速览
  • 选工厂物业洗地机 多家品牌对比参考 - 资讯速览
  • QQ聊天记录解密终极指南:掌握全平台数据库密钥提取的完整方案
  • C++重载、重写、重定义
  • 成都旧房装修选择:2026 彩兔装饰综合实力解读 - 资讯速览
  • 2026唐山瓷砖空鼓翘边维修公司靠谱品牌排名:雨和虹防水维修/雨盛防水维修/秦鑫斌防水维修/森之澜漏水检测/能亿防水补漏/成诺防水修缮 - 雨和虹防水维修
  • 郑州本地黄金回收,甄选靠谱商家辨别技巧 - 李宏哲1
  • Sora 2导出WebM卡在99%?内存溢出阈值、临时缓存路径与线程数最优配比(压测237次实录)
  • 5分钟快速获取微信数据库密钥:Sharp-dumpkey完整使用指南
  • 2026 国内五大土壤检测科研服务机构推荐:2026 最新排名出炉,Wela微尔来检测深耕贵州以全维度实力登顶 - 十大品牌榜
  • m4s-converter:B站缓存视频一键转换神器,让离线观看更自由
  • MoE混合专家架构:如何用2%活跃参数驱动千亿级大模型
  • 暗黑破坏神2存档编辑器完全指南:Diablo Edit2快速上手教程
  • 佛山黄金回收变现首选 收的顶三十年零投诉,千万客户力荐 - 奢侈品回收测评
  • 2026前沿技术型机制研究服务公司吉尼欧:创新方法提升研究精准程度 - 品牌推荐大师
  • 深度解析:唱片公司歌手专辑U盘定制,核心价值与合规实践 - 资讯速览