使用winsw包装服务将nginx包装为Windows服务
**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