将nginx.exe添加为Windows系统服务(如Apache)?

use*_*810 52 windows service windows-services nginx

我将NGINX设置为静态内容的前端服务器,我将Apache用作其他东西的后端服务器.

问题是我无法找到一个合乎逻辑的答案,它允许我制作nginx.exeWindows系统服务(比如我的Apache).

有人遇到过这个答案吗?

Jör*_*örg 76

如何使用Windows Service Wrapper执行此操作

(注:有希望的替代品现在- 又见NSSM解决方案在回答下面的描述Adamy.)

  1. 通过githubnuget下载最新版本的Windows Service Wrapper.
    • 撰写本文时的当前版本是v2.1.2
    • 由于.NET2.0和.NET4.0的v2.x可执行文件可用 - 其他只能按需提供.
  2. 重命名winsw-*.exe为类似的东西nginxservice.exe.
    • 这是将显示拥有nginx进程的进程的名称.
  3. 使用相同的基本名称在exe旁边放置一个XML文件,例如nginxservice.xml.内容应如下所示(验证您的nginx位置).

    <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>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 运行命令nginxservice.exe install.

您现在将nginx在您的服务中获得服务!(它设置为在启动时自动启动;如果要启动服务器,则必须手动启动服务(net start nginx).)


正确设置nginx作为Windows服务的详细说明:http://web.archive.org/web/20150819035021/http: //misterdai.yougeezer.co.uk/posts/2009/10/16/nginx-windows-服务/

以上博文中未包含的其他信息:

您也可以通过此Maven存储库找到最新版本的Windows Service Wrapper:http: //repo.jenkins-ci.org

例:

<dependency>
    <groupId>com.sun.winsw</groupId>
    <artifactId>winsw</artifactId>
    <version>2.2.0</version>
    <classifier>bin</classifier>
    <packaging>exe</packaging>
</dependency>

<repository>
    <id>jenkinsci</id>
    <name>jenkinsci-releases</name>
    <url>http://repo.jenkins-ci.org/releases</url>
</repository>

compile "com.sun.winsw:winsw:2.2.0"

repositories {
    mavenCentral()
    maven { url http://repo.jenkins-ci.org/releases }
}
Run Code Online (Sandbox Code Playgroud)

  • 我更新了xml,因为nginx进程没有停止,我不得不用`taskkill/F/IM nginx.exe`手动杀死它们.Windows Service Wrapper日志说我错过了stopexecutable xml配置.所以我删除了stop参数标签并将其替换为:`<stopexecutable> c:\nginx \nginx.exe </ stopexecutable> <stopargument> -s </ stopargument> <stopargument> stop </ stopargument>` (6认同)
  • 请注意,似乎有一个新的 [WinSW 存储库](https://github.com/kohsuke/winsw) 和 [较新的二进制文件](http://repo.jenkins-ci.org/releases/com/sun/ winsw/winsw/) 可用。 (2认同)

Ada*_*amy 47

下载NSSM表格 http://nssm.cc/download."运行%NSSM_HOME%\nssm.exe安装"Nginx""

在NSSM对话框中选择Nginx可执行文件,然后单击"确定".转到服务并启动新创建的服务"Nginx",完成.

  • 花了几个小时尝试用 winsw 做同样的事情(因为你知道,答案有更多的赞成票,所以必须先尝试一下),失败后在几分钟内用 NSSM 做了。非常感谢!! (3认同)
  • 此解决方案的缺点是 nginx 命令行命令,例如 `nginx.exe -s reload` 将不再起作用:如果更改配置,则必须重新启动服务。作为解决方法,我读到您必须以管理员组中的用户身份运行 nginx,这样您的用户(也在管理员组中)将能够运行命令。 (2认同)

Cor*_*ech 6

SC.EXE仅适用于已支持Windows Services API的可执行文件,并且可以正确响应来自服务控制管理器(SCM)的启动和停止请求.其他常规应用程序,并非专门编写为服务,将无法启动(通常错误1053)...

对于那些exe,你需要一个"服务包装器" - 一个小实用程序,它可以接受来自SCM的启动/停止命令并相应地运行/终止你的应用程序.微软提供Srvany(免费但非常基本),但还有其他一些免费和商业替代品.

顺便说一下,你应该查看本指南,了解如何运行Nginix作为服务,特别是第7步,讨论如何正确地停止Nginix.并非每个包装器都支持该功能(Srvany不支持)......


sun*_*neg 5

我找到的最简单的方法是使用Chocolatey软件包管理器。

安装Chocolatey后,您将打开一个管理提示并输入:

choco install nginx
Run Code Online (Sandbox Code Playgroud)

现在,您正在运行一个名为“ nginx”的Windows服务。


xgq*_*rms 5

您可以使用start.batstop.bat来实现相同的效果.

的start.bat

@ECHO OFF
REM Start Nginx
tasklist /FI "IMAGENAME eq nginx.exe" 2>NUL | find /I /N "nginx.exe">NUL
IF NOT "%ERRORLEVEL%"=="0" (
   REM Nginx is NOT running, so start it
   c:
   cd \nginx
   start nginx.exe
   ECHO Nginx started.
) else (
   ECHO Nginx is already running.
)
Run Code Online (Sandbox Code Playgroud)

stop.bat且

@ECHO OFF
REM Stop Nginx
tasklist /FI "IMAGENAME eq nginx.exe" 2>NUL | find /I /N "nginx.exe">NUL
IF "%ERRORLEVEL%"=="0" (
   REM Nginx is currently running, so quit it
   c:
   cd \nginx
   nginx.exe -s quit
   ECHO Nginx quit issued.
) else (
   ECHO Nginx is not currently running.
)
Run Code Online (Sandbox Code Playgroud)