把Nginx注册成Windows 系统服务(转载)

1. 下载微软的2个工具: instsrv.exe、srvany.exe 
去微软网站下载安装Windows Server 2003 Resource Kit Tools(rktools.exe),它包括标题提及的所有必要的工具,下载完安装好。

?http://download.microsoft.com/download/8/e/c/8ec3a7d8-05b4-440a-a71e-ca3ee25fe057/rktools.exe



2. 运行命令 
在rktools安装目录下(一般在C:\Program Files\Windows Resource Kits\Tools目录)可以发现这两个程序.在运行下面命令之前,确保将srvany.exe复制到nginx的安装(解压)目录下,然后运行: 

Command代码
instsrv Nginx D:\nginx\srvany.exe

这样就安装了一个名为Nginx的服务。也就是将srvany.exe注册成一个服务Nginx。Net start Nginx时,肯定会运行srvany.exe。 


3. 配置Nginx的运行参数:目的是运行srvany.exe时,附带运行D:\nginx\nginx.exe程序。 
可以直接将配置导入到注册表 

Window register代码

Windows Registry Editor Version 5.00  

?[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NGINX\Parameters]   

"Application"="d:\\nginx\\nginx.exe"  

"AppParameters"=""  

"AppDirectory"="d:\\nginx\\nginx\\"  
现在就可以通过控制面板->管理员工具->服务中找到该服务,并启动和停止了。 
但是,当停止Nginix服务后,访问浏览器仍然能看到网站。查看进程,你会发现,Nginx启动了两个nginx进程(根据nginx.conf的配置worker_processes 1;),Fork出来的进程显然没有被停止,结果就是nginx永远关不掉。因此彻底关闭nginx请使用taskkill命令: 

Command代码
taskkill /F /IM nginx.exe > nul

结果是写一个stop_nginx脚本来处理nginx停止的所有操作 

Command代码
@echo off  
echo Stopping nginx service...
net stop nginx  
echo Kill nginx process...  

taskkill /F /IM nginx.exe > nul

顺便,如果想删除服务,使用命令: 

Command代码
sc delete Nginx  

说到这,大家一定会重新思考:如果同样写一个start_nginx脚本,那么还有使用windows服务的必要吗?脚本方式运行nginx除了有运行控制台窗口,似乎没有区别了。有好事者写了一个RunHiddenConsole.exe,可以隐藏控制台窗口。似乎完全不必考虑使用windows服务方法了。 
峰回路转,别忘记我们的初衷,使用windows服务可以在用户退出登陆时,仍然可以运行nginx进程 ,而脚本方式想如此运行就得颇费点周折,结论是windows服务仍然是有必要的,但仅用于启动nginx,至于停止nginx请使用前述脚本。

posted @   Kyw08  阅读(2995)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示