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

我将NGINX设置为静态内容的前端服务器,并使用Apache作为其他事物的后端服务器。

事情是我无法find一个合乎逻辑的答案,让我做nginx.exe一个Windows系统服务(如我的Apache)。

任何遇到这个答案?

概述(取自博客文章):

  1. 通过github或nuget下载最新版本的Windows Service Wrapper 。
    • 当前版本是v2.0.3
    • 由于用于.NET2.0和.NET4.0的v2.x可执行文件可用,其他文件仅在需要时才可用。
  2. winsw-1.xx-bin.exe重命名为nginxservice.exe
    • 这是拥有你的nginx进程的进程显示的名字。
  3. 将一个XML文件放在具有相同基本名称的exe旁边,例如nginxservice.xml 。 内容应该像下面(validation你的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> 
    • 你可以在config github页面find关于configuration的最新细节,以及一个在这里显示所有可能选项的通用示例
  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 Repositoryfind最新版本的Windows Service Wrapper: http : //repo.jenkins-ci.org

例:

 <dependency> <groupId>com.sun.winsw</groupId> <artifactId>winsw</artifactId> <version>1.17</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> 

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

在NSSM对话框中selectNginx可执行文件,然后确定。 转到服务,并开始新的服务“Nginx”,完成。

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

对于那些exe文件,你需要一个“服务包装器” – 一个小的实用程序,它可以接受来自SCM的启动/停止命令,并相应地运行/终止你的应用程序。 微软提供了Srvany (这是免费的,但非常基本),但还有其他几个免费和商业的select。

顺便说一句,你应该看看这个指南显示如何运行Nginx作为服务 ,特别是第7步,讨论如何正确地停止Nginix。 不是每个包装都会支持这个function(Srvany不会)…

我发现的最简单的方法是使用Chocolatey包pipe理器。

一旦安装了Chocolatey,您将打开一个pipe理提示符并键入:

 choco install nginx 

您现在有一个名为'nginx'的Windows服务正在运行。

你可以使用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. ) 

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. ) 

从这里下载zip文件。

winginx\build提取nginx-service.exe并运行它。

正式nginx维基为这个目的参考winginx 。 它在linux环境下构buildexe-installer。 过程如下所示:

 sudo apt-get install nsis make wget https://github.com/InvGate/winginx/archive/master.zip unzip master.zip cd winginx-master/ make ls -lh ./build/nginx-service.exe 

要获得实际的版本,你应该在Makefile指定它们。

而不是把nginx变成一个服务,或者使用CMD来启动一个进程,这似乎并不奏效。 我发现Powershell可以很容易地将nginx作为一个独立的进程来启动。 我已经将nginx和PHP结合起来了。 下面是脚本,名为“start-nginx.ps1”

 $fcgiPort = "127.0.0.1:9000" $PHPini = "c:\php\php.ini" $ErrorActionPreference = "SilentlyContinue" function restart { Push-Location /nginx Stop-Process -Force -Name nginx Start-Process ./nginx.exe -WindowStyle Hidden Stop-Process -Force -Name php-cgi Start-Process "c:\php\php-cgi.exe" -ArgumentList ("-b" + $fcgiPort + " -c " + $PHPini) -WindowStyle Hidden Pop-Location } restart 

这个脚本可以从任何目录执行,但是需要为你的nginx安装位置定制。

这个脚本包含一个无声的尝试,在启动之前杀死nginx和PHP。

Windows系统应该将“.ps1”文件识别为PowerShell,即使在CMD提示符下也是如此。

我创build了另一个小脚本来杀死正在运行的进程,它只是从该文件中删除“启动进程”行。

要在启动时运行,我使用win-R命令导航到目录shell:startup

在这个目录中放置一个启动脚本的快捷方式,nginx从启动开始!

Powershell还包括更复杂的计划任务的能力,并且可以安排此脚本在启动时运行。 看到这个链接

从文章:

  >powershell $trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30 Register-ScheduledJob -Trigger $trigger -FilePath $HOME/start-nginx.ps1 -Name startNginx 

结合起来,我认为这种方法可以从nginx的Windows服务中获得所需的一切,而且不需要任何第三方应用程序。