我将NGINX设置为静态内容的前端服务器,我将Apache用作其他东西的后端服务器。
问题是我无法找到一个合乎逻辑的答案,它允许我使nginx.exe
成为Windows系统服务(就像我的Apache)。
有人遇到过这个答案吗?
答案 0 :(得分:75)
如何使用 Windows Service Wrapper
执行此操作(注意:目前有一些很有前途的替代方案 - 来自see also NSSM solution described in answer below的Adamy。)
winsw-*.exe
重命名为nginxservice.exe
。
将具有相同基本名称的XML文件放在exe旁边,例如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>
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 }
}
答案 1 :(得分:44)
下载NSSM表格 http://nssm.cc/download。 &#34;运行%NSSM_HOME%\ nssm.exe安装“Nginx”&#34;
在NSSM对话框中选择Nginx可执行文件,然后单击“确定”。 转到服务并启动新创建的服务&#34; Nginx&#34;,完成。
答案 2 :(得分:6)
SC.EXE仅适用于已支持Windows Services API的可执行文件,并且可以正确响应来自服务控制管理器(SCM)的启动和停止请求。其他常规应用程序,并非专门编写为服务,将无法启动(通常错误1053)......
对于那些exe,你需要一个“服务包装器” - 一个小实用程序,可以接受来自SCM的启动/停止命令并相应地运行/终止你的应用程序。 Microsoft提供Srvany(免费但非常基本),但还有其他一些免费和商业替代方案。
顺便说一句,你应该查看这个guide showing how to run Nginix as a service,尤其是第7步,它讨论了如何正确地停止Nginix。并非每个包装器都支持该功能(Srvany不支持)......答案 3 :(得分:6)
您可以使用 start.bat 和 stop.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.
)
@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 :(得分:4)
我发现的最简单方法是使用Chocolatey软件包管理器。
安装Chocolatey后,打开管理提示并输入:
<mvc:annotation-driven>
<mvc:message-converters register-defaults="false">
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="objectMapper">
<array>
<bean class="com.yourproject.example.CustomObjectMapper"/>
</array>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
您现在拥有一个名为&#39; nginx&#39;的Windows服务。运行
答案 5 :(得分:1)
官方nginx wiki出于此目的,winginx对{{3}}进行了审核。它在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
中指定它们。
答案 6 :(得分:1)
从here下载zip文件。
从nginx-service.exe
中提取winginx\build
并运行它。
答案 7 :(得分:1)
NSSM is the best tool to run Nginx as a service.
If you do not want to use any external 3rd party software then you can implement any of these two methods.
Windows Task Scheduler
Windows Startup shortcut
Create one shortcut of nginx.exe and put it in the startup folder of Windows.
Follow this answer to find your startup location.
答案 8 :(得分:0)
而不是将nginx转变为服务,或者使用CMD来启动流程,而这似乎并不起作用。我发现Powershell可以很容易地将nginx作为一个独立的进程启动。我已经将nginx与PHP结合起来了。下面是脚本,名为&#34; start-nginx.ps1&#34;
$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系统应该识别&#34; .ps1&#34;文件作为powershell,即使在CMD提示符中也是如此。
我创建了另一个小脚本来杀死正在运行的进程,它只是删除了&#34; start-process&#34;该文件中的行。
要在启动时运行,我使用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服务所需的一切,并且不需要任何第三方应用程序。