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

Add nginx.exe as Windows system service (like Apache)?

我将nginx设置为静态内容的前端服务器,并将apache用作其他内容的后端服务器。

问题是我找不到一个合乎逻辑的答案来让我把nginx.exe变成一个Windows系统服务(比如我的Apache)。

有没有遇到这个问题的答案?


如何与Windows服务,它的包装

(注:有前途的替代解决方案现在也对国有企业nssm中描述下面的答案来自adamy)。

  • 下载最新版本的Windows服务包或通过nuget GitHub。
    • 这是当前版本的写作V2.2.0
    • 由于v2.x executables是.net2.0 .net4.0只可用-和其他点播。
  • 重命名winsw-*.exenginxservice.exe到这样的事情。
    • 这是一个名称,这将出现在你的owns nginx的工艺过程。
  • 一个XML文件到下一个地方的名称相同的文件为基础的,例如,nginxservice.xml。以下的内容(应该是像你的起始位置验证)。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <service>
      <id>nginx</id>
      <name>nginx</name>
      <description>nginx</description>
      <executable>c:
    ginx
    ginx.exe</executable>
      <logpath>c:
    ginx\</logpath>
      <logmode>roll</logmode>
      <depend></depend>
      <startargument>-p</startargument>
      <startargument>c:
    ginx</startargument>
      <stopexecutable>c:
    ginx
    ginx.exe</stopexecutable>
      <stopargument>-p</stopargument>
      <stopargument>c:
    ginx</stopargument>
      <stopargument>-s</stopargument>
      <stopargument>stop</stopargument>
    </service>
    • 你可以找到最新信息关于在GitHub页面配置在线配置通用的例子显示,在所有可能的选项和一个安装指南。
  • 运行该命令nginxservice.exe install的管理员。
  • 现在你将有一个nginx服务在您的服务!(它被设置为启动自动启动;启动你的服务器,如果你想,你必须手动启动的服务(net start nginx)。。。。。。。)

    详细描述:正确设置nginx的服务:http:/ / / / / 20150819035021 web.archive.org网站http://misterdai.yougeezer.co.uk /岗位/ 2009/10/16/nginx的服务窗口

    额外的信息不包含在以上的博客帖子:

    你可以找到最新版本的Windows服务包,这也通过Maven仓库:http://repo.jenkins-ci.org

    实例:在Maven的+工具

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <dependency>
        <groupId>com.sun.winsw</groupId>
        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 }
    }


    nssm表格下载http://nssm.cc /下载。"运行"nssm _ %家庭% nssm.exe nginx的"安装"

    选择对话框中的可执行nssm nginx的,然后确定。去创造新的服务和服务"启动nginx的,"完成的。


    You can using start.bat and stop.bat to realize the same effect.

    start.bat

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @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
    ginx
       start nginx.exe
       ECHO Nginx started.
    ) else (
       ECHO Nginx is already running.
    )

    stop.bat

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @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
    ginx
       nginx.exe -s quit
       ECHO Nginx quit issued.
    ) else (
       ECHO Nginx is not currently running.
    )


    这只会工作的sc.exe executables已经支持的Windows API和服务的启动和停止恰当可以响应请求从服务控制管理器(SCM)。其他的应用程序,不写具体的服务,将我们的启动失败(通常与错误1053)…………………

    这些文件是需要的,你的"服务包"——小实用工具可以在命令行启动/停止从单片机的应用和相应的运行/停止你。(这是微软提供的免费srvany还非常基本的),但有一些免费的和商业的其他替代品。

    顺便说一下,你应该检查这个nginix指南显示如何运行的服务,这是讨论如何停止的STEP 7 nginix恰当。不支持这一功能,将srvany包装不是)……


    我发现的方法easiest味巧克力,是使用包管理器。

    一旦你安装的是一味巧克力,开放型管理和提示:

    1
    choco install nginx

    你现在有一个叫nginx的运行Windows服务。


    NSSM是将nginx作为服务运行的最佳工具。如果您不想使用任何外部第三方软件,那么您可以实现这两种方法中的任何一种。

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

    Windows任务计划程序

    • 如本答案所述,准备一个start.bat文件。
    • 把这个文件放在nginx.exe存在的地方。
    • 打开Windows任务计划程序,并按照此答案中的说明设置任务以无限期运行它。
    • 不要忘记以系统帐户的最高权限运行此任务,可以在此处找到更多详细信息。
    • 使任务在特定时间每天启动,通过BAT文件检查服务是否已经运行,以避免创建多个nginx.exe实例。
    • 如果由于某种原因nginx关闭,5分钟内它将启动。

    Windows启动快捷方式

    • 创建nginx.exe的一个快捷方式,并将其放到Windows的启动文件夹中。

    • 按照此答案查找启动位置。

    • 当您登录系统时,nginx将自动运行。
    • 这是最简单的。但是,它取决于用户配置文件,即,如果您在服务器上运行nginx,它将仅为您的用户帐户运行,当您注销时,它将停止运行。
    • 这是开发环境的理想选择。


    而不是把nginx变成一个服务,或者使用cmd来启动一个进程,这看起来确实不起作用。我发现PowerShell可以很容易地将nginx作为独立进程启动。我已经把nginx和php结合起来了。下面是名为"start nginx.ps1"的脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $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,即使在命令提示下也是如此。

    我创建了另一个小脚本来终止正在运行的进程,它只是从这个文件中删除了"开始进程"行。

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

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

    PowerShell还包括一种更复杂的任务调度功能,并且可以调度此脚本在启动时运行。查看此链接

    从文章中:

    1
    2
    3
    4
     >powershell

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

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


    从这里下载的zip文件。

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


    nginx官方Wiki指的是在线winginx用于此目的。它生成exe安装程序在Linux环境。这个过程看起来像:

    1
    2
    3
    4
    5
    6
    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指定。