为了方便自己的开发,想把nginx安装为windows服务。网上搜了一下,基本都是推荐使用windows service wraper来制作。由于也不是生产使用,所以没有过多验证方案是否最优(估计还不错吧),就自己做了一把。
网上的例子都是基于windows service wraper 1.x的,我直接搜索github上看到了有了2.0版本,本人就爱用新的,就下载了它的exe文件。地址:https://github.com/kohsuke/winsw/.
看了一下xml文件的配置说明,感觉和网上说1.0的配置没啥区别。将下载的WinSW.NET4.exe改名为nginxsrv.exe,创建了nginxsrv.xml都放到nginx的目录,然后执行nginxsrv.exe install。
网上的xml如下:
<service>
<id>Nginx</id>
<name>Nginx 1.6.3</name>
<description>This service runs Nginx continuous integration system.</description>
<startmode>Automatic</startmode>
<env name="HOME" value="D:/nginx-1.6.3"/>
<executable>%HOME%/nginx.exe</executable>
<startargument>-p %HOME%</startargument>
<stopargument>-p %HOME% -s stop</stopargument>
<logmode>rotate</logmode>
</service>
坑1:不知道是我用的版本高还是什么原因,启动是失败的。查看日志,发现说路径找不到,仔细看发现日志中路径被双引号包着,前面多了个空格,解决方式是startargument中的-p与后面的路径之间,不要留空格,停止参数也是如此。
坑2:解决了路径有空格的问题,安装成功后,启动没问题。停止却听不了,很长时间后失败了。找了半天原因,在windows日志中,发现命令的参数外面给加了双引号最后被执行的命令是:nginx.exe "-pD:/nginx-1.6.3 -s stop"
这样不行,最后的办法,把所有命令参数都拆开,使用多个stopargument来设置,最后的xml文件是这样的:
<service>
<id>Nginx</id>
<name>Nginx 1.6.3</name>
<description>This service runs Nginx continuous integration system.</description>
<startmode>Automatic</startmode>
<env name="HOME" value="D:/nginx-1.6.3"/>
<executable>%HOME%/nginx.exe</executable>
<startargument>-p%HOME%</startargument>
<stopargument>-s</stopargument>
<stopargument>stop</stopargument>
<logmode>rotate</logmode>
<logpath>srvlogs</logpath>
</service>
到此搞定。