我正在尝试将nginx(反向代理)作为Windows服务运行,以便即使用户未连接也可以代理请求。
我搜索了很多,发现winsw可以从.exe文件(例如nginx)创建服务。
我发现许多在线教程说要创建一个xml文件,如下所示
<service>
<id>nginx</id>
<name>nginx</name>
<description>nginx</description>
<executable>c:\nginx\nginx.exe</executable>
<logpath>c:\nginx\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-p c:\nginx</startargument>
<stopargument>-p c:\nginx -s stop</stopargument>
</service>
(我在名为nginx的文件夹中将nginx.exe放在c:o路径正确的位置)。
现在的问题是服务已经创建,但我似乎无法启动它,每次我尝试启动它时都会弹出一个窗口
Error 1053: The service didn't respond to the start or control request in a timely fashion
有谁知道如何解决此问题或以不同方式运行nginx作为窗口服务?
答案 0 :(得分:23)
在这里偶然发现并设法使用这个免费的开源替代方案:https://nssm.cc/
它基本上只是一个帮助您创建服务的GUI。我使用的步骤:
从那时起你应该好好继续。
答案 1 :(得分:3)
我找到了NSSM(非吸吮服务经理):一个完全符合我想要的程序,设置起来要容易得多。
答案 2 :(得分:2)
我找到了NSSM以外的其他解决方案。这是Windows Service Wrapper,以下是说明:
通过github下载最新版本的Windows Service Wrapper。
将winsw-xxxx.exe重命名为nginxservice.exe。
<service> <id>nginx</id> <name>nginx</name> <description>nginx</description> <executable>c:\nginx\nginx.exe</executable> <logpath>c:\nginx\</logpath> <logmode>roll</logmode> <depend></depend> <startargument>-p</startargument> <startargument>c:\nginx</startargument> <stopexecutable>c:\nginx\nginx.exe</stopexecutable> <stopargument>-p</stopargument> <stopargument>c:\nginx</stopargument> <stopargument>-s</stopargument> <stopargument>stop</stopargument> </service>
您可以在config GitHub page上找到有关配置的最新详细信息,以及显示所有可能选项的一般示例here。
以上回答取自post。
答案 3 :(得分:1)
As told in other answers NSSM is the best tool to run Nginx as a service.
If you do not want to use any external 3rd party software then you can implement any of these two methods.
Windows Task Scheduler
Windows Startup shortcut
Create one shortcut of nginx.exe and put it in the startup folder of Windows.
Follow this answer to find your startup location.
答案 4 :(得分:1)
NSSM非常好,但是还有另一种选择:PowerShell Cmdlet New-Service
这里只是一个简单的例子:
$params = @{
Name = "MyService"
BinaryPathName = "path/to/exe"
DisplayName = "My Service"
StartupType = "Automatic"
Description = "Description of my service"
}
New-Service @params
答案 5 :(得分:0)
你需要这个为winsw
<service>
<id>nginx</id>
<name>nginx</name>
<description>nginx</description>
<executable>c:\...\nginx.exe</executable>
<logpath>...</logpath>
<logmode>roll</logmode>
<stopexecutable>c:\nginx\nginx-1.14.0\nginx.exe</stopexecutable>
<stopargument>-s</stopargument>
<stopargument>stop</stopargument>
</service>
假设您使用的是nginx.conf,则需要<executable>
因此不需要任何启动参数,还需要<stopexecutable>
和<stopargument>
s(以仿真{ {1}})