使用winsw包装服务将nginx包装为Windows服务

半城伤御伤魂 提交于 2021-01-11 08:35:31

**Nginx本身在Windows上并不支持以服务的形式运行,官方文件中有提到。http://nginx.org/en/docs/windows.html,所以在Windows下使用winsw将Nginx包装为服务运行。

⒈下载

  github地址:https://github.com/kohsuke/winsw

  github下载地址:https://github.com/kohsuke/winsw/releases

⒉完整的XML配置信息

  1 <!-- 
  2     版权所有(c)2016 Oleg Nenashev和其他贡献者
  3 
  4     特此免费向任何获得本文件副本的人授予许可。
  5 
  6     软件和相关文档文件(以下简称“软件”),用于在没有
  7 
  8     限制,包括但不限于使用、复制、修改、合并、发布,
  9 
 10     分发、再许可和/或销售软件副本,并允许
 11 
 12     为此提供的软件应符合以下条件:
 13 
 14     上述版权声明和本许可声明应包含在所有副本中,或
 15 
 16     软件的大部分。
 17 
 18     本软件按“原样”提供,不作任何形式的明示或暗示保证,包括
 19 
 20     但不限于对适销性、特定用途适用性和
 21 
 22     不干涉。在任何情况下,作者或版权持有人均不承担任何索赔责任,
 23 
 24     损害赔偿或其他责任,无论是在合同诉讼、侵权诉讼或其他诉讼中,由以下原因引起:
 25 
 26     出于或与软件有关,或与软件的使用或其他交易有关。 
 27 -->
 28 <!-- 
 29 
 30     此配置文件应放在WinSW可执行文件附近,名称应相同。
 31 
 32     例如,对于myapp.exe,配置文件名应为myapp.xml。
 33 
 34     获取有关配置选项的更多信息:https://github.com/kohsuke/winsw/blob/master/doc/
 35     xmlconfigfile.md 
 36     
 37     -->
 38 
 39 <configuration>
 40   <!-- 强制性选项 -->
 41 
 42   <!-- 服务的ID。在Windows系统中应该是唯一的-->
 43   <id>Nginx</id>
 44 
 45   <!-- 显示的服务名称 -->
 46   <name>MyApp Service (powered by WinSW)</name>
 47 
 48   <!-- 服务描述 -->
 49   <description>This service is a service cratead from a sample configuration</description>
 50   
 51   <!-- 启动的可执行文件的路径 -->
 52   <executable>./nginx.exe</executable>
 53   <!-- <executable>C:/Programs/nginx-1.17.2/nginx.exe</executable> -->
 54 
 55 <!--
 56     安装
 57     这些选项仅在安装过程中使用。
 58     如果不重新安装服务,它们的修改将不会生效。
 59 -->
 60 
 61   <!--
 62     可选选项:服务帐户
 63     定义运行服务的帐户。
 64   -->
 65   <!--
 66   <serviceaccount>
 67     <domain>YOURDOMAIN</domain>
 68     <user>useraccount</user>
 69     <password>Pa55w0rd</password>
 70     <allowservicelogon>true</allowservicelogon>
 71   </serviceaccount>
 72   -->
 73   
 74   <!--
 75     选项:失败
 76     定义一系列操作,如果托管可执行文件失败,则应执行这些操作。
 77     支持的操作:restart(重新启动)、reboot(重新启动)、none(无)
 78   -->
 79   <!--
 80   <onfailure action="restart" delay="10 sec"/>
 81   <onfailure action="restart" delay="20 sec"/>
 82   <onfailure action="reboot" />
 83   -->
 84   
 85   <!--
 86     选项:重置文件
 87     Windows服务重置故障状态的时间。
 88     默认值:1天
 89   -->
 90   <!--
 91   <resetfailure>1 hour</resetfailure>
 92   -->
 93 
 94 <!--
 95 部分:可执行管理
 96 -->
 97 
 98   <!-- 
 99   选项:参数
100   指传递给可执行文件的运行参数
101   -->
102   <!--
103   <arguments>-classpath c:\cygwin\home\kohsuke\ws\hello-world\out\production\hello-world test.Main</arguments>
104   -->
105 
106   <!-- 
107   选项:启动参数
108   在可执行文件启动时传递给它的启动参数
109   如果指定,则重写参数。
110   -->
111   <!--
112   <startarguments></startarguments>
113   -->
114   
115   <!--
116   选项:工作目录
117   如果指定,则设置可执行文件的默认工作目录
118   默认值:包装服务可执行文件的目录。
119   -->
120   <!--
121   <workingdirectory>C:\myApp\work</workingdirectory>
122 -->
123   
124   <!--
125     选项:优先级
126 
127     所需的进程优先级。
128 
129     可能值:Normal(正常)、Idle(空闲)、High(高)、RealTime(实时)、BelowNormal(低于正常)、AboveNormal(高于正常)
130 
131     默认值:Normal(正常)
132   -->
133   <priority>Normal</priority>
134   
135   <!-- 
136     选项:服务停止超时时间
137 
138     在强制终止可执行文件之前,等待服务正常关闭可执行文件的时间
139 
140     默认值:15秒
141   -->
142   <stoptimeout>15 sec</stoptimeout>
143     
144   <!--
145     选项:StopArentProcessFirst
146     如果设置,winsw将在停止子进程之前终止父进程。
147     默认值:false(假)
148   -->
149   <stopparentprocessfirst>false</stopparentprocessfirst>
150   
151   
152   <!-- 
153     选项:StopExecutable
154     执行服务关闭的可选可执行文件的路径。
155     只有在指定了“stopArguments”时才使用此可执行文件。
156     如果未使用此选项定义“stopArguments”,则“executable”将用作stop可执行文件。
157   -->
158   <!--
159   <stopexecutable>%BASE%\stop.exe</stopexecutable>
160   -->
161 
162   <!-- 
163     选项:停止参数
164     附加参数,应在终止期间传递给stop可执行文件。
165     此选项还允许通过停止可执行文件终止可执行文件。
166   -->
167   <!--
168   <stoparguments>-stop true</stoparguments>-->
169   -->
170 <!-- 
171 章节:服务管理
172 -->
173     <!--
174       选项:启动模式
175 
176       定义服务的启动模式。
177 
178       支持的模式:Automatic(自动)、Manual(手动)、Boot(引导)、System(系统)(后一种模式仅支持驱动程序服务)
179 
180       默认模式:Automatic(自动)
181     -->
182     <startmode>Automatic</startmode>
183     
184     <!--
185       选项:DelayedAutoStart
186 
187       如果在“StartMode”字段中指定了“Automatic”,则启用延迟的自动启动。
188 
189       请参阅Winsw文档以获取有关支持的平台版本和限制的信息。
190     -->
191     <!--<delayedAutoStart/>-->
192     
193     <!-- 
194       选项: depend
195       指定必须在此服务启动之前启动的服务(可选)。
196     -->
197     <!--
198     <depend>Eventlog</depend>
199     <depend>W32Time</depend>
200     -->
201     
202     <!--
203       选项:waithint
204       挂起停止操作所需的估计时间。
205       在指定的时间段过去之前,服务应该下次调用setServiceStatus函数。
206       否则服务将被标记为无响应
207       默认值:15秒
208     -->
209     <waithint>15 sec</waithint>
210     
211     <!--
212       选项:睡眠时间
213       服务下次调用setServiceStatus函数之前的时间。
214       不要等待超过等待提示。好的间隔是等待提示的十分之一,但不小于1秒,也不大于10秒。
215       默认值:1秒
216     -->
217     <sleeptime>1 sec</sleeptime>
218     
219     <!--
220       选项:交互式
221       指示服务可以与桌面交互。
222     -->
223     <!--
224     <interactive/>
225     -->
226     
227 <!-- 
228 部分:日志记录
229 -->
230 
231   <!--
232       选项:日志路径
233       为服务包装程序生成的所有日志设置自定义日志目录
234       默认值:目录,其中包含执行器
235   -->
236   <!--
237     <logpath>%BASE%\logs</logpath>
238   -->
239   
240   <!--
241     选项:日志
242 
243     为可执行文件生成的日志定义日志记录模式。
244 
245     支持的模式:
246 
247       * append - 追加更新现有日志
248       * none - 不要将可执行日志保存到磁盘
249       * reset - 启动时擦除日志文件
250       * roll - 根据大小旋转日志
251       * roll-by-time - 根据时间旋转日志
252       * rotate - 根据大小旋转日志(8个日志,每个10MB)。此模式已弃用,请使用“滚动”
253     
254     默认模式:append(追加)
255 
256     每种模式都有不同的设置。
257 
258     更多详细信息,请参阅https://github.com/kohsuke/winsw/blob/master/doc/logginganderreporting.md。
259 
260   -->
261   <log mode="append">
262     <!--
263     <setting1/>
264     <setting2/>
265   -->
266   </log>
267   
268 <!--
269 部分:环境设置
270 -->
271   <!--
272       选项:env
273       设置或重写环境变量。
274       顶层可能配置了多个条目。
275   -->
276   <!--
277   <env name="MY_TOOL_HOME" value="C:\etc\tools\myTool" />
278   <env name="LM_LICENSE_FILE" value="host1;host2" />
279   -->
280 
281 
282   <!--
283       选项:下载
284       启动前由包装器执行的下载列表
285   -->
286   <!--
287   <download from="http://www.google.com/" to="%BASE%\index.html" />
288   
289   下载并在出现错误时使服务启动失败:
290   <download from="http://www.nosuchhostexists.com/" to="%BASE%\dummy.html" failOnError="true"/>
291 
292   由于连接未加密而导致基本身份验证不安全的示例:
293   <download from="http://example.com/some.dat" to="%BASE%\some.dat"
294             auth="basic" unsecureAuth=“true”
295             username="aUser" password=“aPassw0rd" />
296 
297   通过HTTPS安全基本身份验证:
298   <download from="https://example.com/some.dat" to="%BASE%\some.dat"
299             auth="basic" username="aUser" password="aPassw0rd" />
300 
301   当目标服务器和客户端是同一域的成员或服务器域和客户端域属于同一个信任林:
302   <download from="https://example.com/some.dat" to="%BASE%\some.dat" auth="sspi" />
303   -->
304 
305 <!-- 
306 章节:其他选项
307 -->
308   
309   <!--
310     选项:BeeponShutdown
311     指示服务在关闭时(如果操作系统支持)应发出嘟嘟声。
312   -->
313   <!--
314   <beeponshutdown/> 
315   -->
316   
317 <!--
318     部分:扩展
319     此配置部分允许指定自定义扩展。
320     更多信息请访问:https://github.com/kohsuke/winsw/blob/master/doc/extensions/extensions.md
321 -->
322 
323 <!--
324 <extensions>
325   *注意扩展的ID值必须唯一
326   <extension enabled="true" id="extension1" className="winsw.Plugins.SharedDirectoryMapper.SharedDirectoryMapper">
327     <mapping>
328       <map enabled="false" label="N:" uncpath="\\UNC"/>
329       <map enabled="false" label="M:" uncpath="\\UNC2"/>
330     </mapping>
331   </extension>
332   ...
333 </extensions>
334 -->
335 
336 </configuration>

 

⒊我编写的XML配置文件

 

 1 <configuration>
 2 
 3   <id>Nginx</id>
 4 
 5   <name>Nginx</name>
 6 
 7   <description>Nginx-1.17.2 Proxy</description>
 8 
 9   <executable>C:/Users/fanqi/Downloads/nginx-1.17.2/nginx.exe</executable>
10   
11   <onfailure action="restart" delay="20 sec"/>
12 
13   <workingdirectory>C:/Users/fanqi/Downloads/nginx-1.17.2</workingdirectory>
14 
15   <stoparguments>-s stop</stoparguments>
16  
17   <logpath>C:/Users/fanqi/Downloads/nginx-1.17.2/log</logpath>
18 
19   <log mode="append"></log>
20 
21 </configuration>

 

⒋执行命令安装服务

./WinSW.NET4.exe install

⒌有问题删除服务

使用管理员命令运行CMD

sc delete Nginx

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!