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

问题描述 投票:51回答:9

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

问题是我无法找到一个合乎逻辑的答案,它允许我使nginx.exe成为Windows系统服务(就像我的Apache)。

有人遇到过这个答案吗?

windows service windows-services nginx
9个回答
76
投票

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

(注意:现在有更简单的替代方案 - 另见using chocolatey package managersunegusing NSSM directlyAdamy所述的解决方案)

  1. 通过Windows Service Wrappergithub下载最新版本的nuget。 撰写本文时的当前版本是v2.2.0 由于.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> 您可以在config github page上找到有关配置的最新详细信息,这是一个显示所有可能选项herean installation guide的通用示例。
  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-service/

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

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

Maven + Gradle的示例:

<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 }
}

44
投票

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

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


6
投票

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

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

顺便说一句,你应该看看这个guide showing how to run Nginix as a service,特别是第7步讨论如何正确地停止Nginix。并非每个包装器都支持该功能(Srvany不支持)......


6
投票

您可以使用start.bat和stop.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.
)

4
投票

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

安装Chocolatey后,打开管理提示并键入:

choco install nginx

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


1
投票

here下载zip文件。

nginx-service.exe中提取winginx\build然后运行它。


1
投票

而不是将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提示符中也是如此。

我创建了另一个小脚本来杀死正在运行的进程,它只是从这个文件中删除了“start-process”行。

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

在此目录中放置启动脚本的快捷方式,nginx在启动时启动!

Powershell还包括更复杂的计划任务的能力,并且可以安排此脚本在启动时运行。 See This Link

来自文章:

 >powershell

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

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


1
投票

为此目的,官方nginx wiki参加winginx。它在linux环境中构建exe-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中指定它们。


1
投票

NSSM是运行Nginx即服务的最佳工具。 如果您不想使用任何外部第三方软件,则可以实施这两种方法中的任何一种。

  • Windows任务计划程序
  • Windows启动快捷方式

Windows任务计划程序

  • this answer中所述,准备一个start.bat文件。
  • 将此文件放在nginx.exe所在的位置。
  • 打开Windows任务调度程序并按照this answer中的描述设置任务以无限期运行它。
  • 不要忘记将此任务作为系统帐户的最高权限运行,更多详细信息可以找到here
  • 让任务在某个时间每天开始,通过bat文件,它将检查服务是否已经运行,以避免创建多个nginx.exe实例。
  • 如果由于某种原因Nginx关闭,它将在5分钟内启动。

Windows启动快捷方式

  • 创建一个nginx.exe快捷方式并将其放在Windows的启动文件夹中。
  • 按照this answer找到您的创业地点。
  • 每当您登录系统时,Nginx都会自动运行。
  • 这个是最简单的。但是,它取决于用户配置文件,即如果您在服务器上运行Nginx,它将仅为您的用户帐户运行,当您注销它时停止。
  • 这是开发环境的理想选择。
© www.soinside.com 2019 - 2024. All rights reserved.