使用WinSW将Nginx注册为windows系统服务可随机启动

2017-05-10 14:40:02 +0000

       在windows上使用Nginx时发现不能随机启动,而在使用Linux版没有这个问题。查阅官方文档才知道当前windows版本的Nginx只是作为一个标准程序运行,而不是一个系统服务。官方也给出了说明,这是后面要新增加的重要功能。原文:http://nginx.org/en/docs/windows.html

 

       如果不注册成系统服务,服务器重启(断电、自动更新 etc.)就需要自己手动重启,不然网站、系统均无法访问。想想挺可怕,搜索发现可以通过winsw把Nginx注册成一个系统服务。写这篇博客的原因是按照网络大量教程折腾半天都没成功,后来对比官网给的例子发现原因是新版本的WinSW不兼容旧版本的配置文件,希望大家少走些弯路。

 

      WinSW是一个可执行的二进制文件,可用于将自定义进程作为Windows服务进行包装和管理。可以将nginx包装成一个系统服务,实现Nginx随windows随机启动。项目主页:https://github.com/kohsuke/winsw  

 

1. 在项目主页内找到winsw的下载页面(我用的是最新2.0.2版本,你可以下载最新的)

http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/2.0.2/

下载的文件:winsw-2.0.2-bin.exe

 

2. 在nginx项目页面下载nginx windows版本

http://nginx.org

把nginx压缩包解压放到指定目录,例如我放的是d盘根目录。特别强调路径不要带空格的,否则会启动失败。

nginx目录是:D:/nginx-1.11.11

 

3. 将winsw-2.0.2-bin.exe复制到nginx目录:D:/nginx-1.11.11,并将其改成nginx-service.exe 

 

4. 新建一个xml文件nginx-service.xml,名称一定要与3中相同(nginx-service)。文件内容如下:

<service>
  <id>nginx</id>
  <name>nginx</name>
  <description>nginx</description>
  <env name="path" value="D:/nginx-1.11.11"/>
  <executable>D:/nginx-1.11.11/nginx.exe</executable>
  <arguments>-p D:/nginx-1.11.11</arguments>
  <logpath>D:/nginx-1.11.11/logs/</logpath>
  <logmode>roll</logmode>
</service>

 

5. 运行Windows cmd命令,进入nginx目录:,在运行nginx-service.exe install将其注册为windws系统服务。

可在系统服务中看到nginx服务

 

 

6. 鼠标右键启动服务,访问http://localhost出现nginx页面,安装成功。 

 

7. 如果出现错误信息,可在nginx的日志文件logs查看。刚开始在测试时一直启动服务失败,原因是按照网络上的(旧版)配置文件启动不成功,希望可以少让大家走一些弯路。旧版的配置文件如下(注意与4中对比):

 

<!--service>

 <id>nginx</id>

  <name>nginx</name>

  <description>nginx</description>

  <executable>D://nginx-1.11.11/nginx.exe</executable>

  <logpath>D://nginx-1.11.11/logs</logpath>

  <logmode>roll</logmode>

  <depend></depend>

  <startargument>-p D://nginx-1.11.11</startargument>

  <stopargument>-p D://nginx-1.11.11 -s stop</stopargument>

</service-->