59

静的コンテンツのフロント エンド サーバーとして NGINX をセットアップし、その他のバックエンド サーバーとして Apache を使用しています。

nginx.exe問題は、Windows システム サービス (Apache など)を作成できる論理的な答えが見つからないことです。

これに対する答えはありますか?

4

9 に答える 9

78

Windows Service Wrapperでそれを行う方法

(注: 現在のところ、より簡単な代替手段があります。以下で説明する解決策も参照してください。sunegによるチョコレート パッケージ マネージャーを使用し、 Adamyから直接NSSMを使用します)

  1. githubまたはnugetからWindows Service Wrapperの最新バージョンをダウンロードします。
    • この記事の執筆時点での現在のバージョンは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>
    
  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-サービス/

上記のブログ投稿に含まれていない追加情報:

Windows Service Wrapper の最新バージョンは、次の Maven リポジトリからも見つけることができます: 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 }
}
于 2012-12-14T08:56:58.037 に答える
54

NSSM フォーム http://nssm.cc/downloadをダウンロードします。"%NSSM_HOME%\nssm.exe install "Nginx" を実行"

NSSM ダイアログで Nginx 実行可能ファイルを選択し、[OK] をクリックします。サービスに移動し、新しく作成されたサービス「Nginx」を開始します。

于 2014-02-19T01:51:04.557 に答える
8

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.
)
于 2016-10-01T02:28:35.150 に答える
7

SC.EXE は、Windows サービス API を既にサポートしており、サービス コントロール マネージャー (SCM) からの要求の開始と停止に適切に応答できる実行可能ファイルに対してのみ機能します。特にサービスとして書かれていない他の通常のアプリケーションは、単に起動に失敗します (通常はエラー 1053 で)...

これらのexeには、「サービスラッパー」が必要です。これは、SCMからの開始/停止コマンドを受け入れ、それに応じてアプリケーションを実行/終了できる小さなユーティリティです。Microsoft はSrvany (無料ですが非常に基本的なもの) を提供していますが、他にもいくつかの無料の商用の代替手段があります。

ところで、Nginix をサービスとして実行する方法を示すこのガイド、特に Nginix を適切に停止する方法について説明しているステップ 7 をチェックしてください。すべてのラッパーがその機能をサポートしているわけではありません (Srvany はサポートしていません)...

于 2012-10-18T21:53:07.870 に答える
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 システムは、CMD プロンプトであっても、「.ps1」ファイルを powershell として認識するはずです。

実行中のプロセスを強制終了する別の小さなスクリプトを作成しました。これは、このファイルから「start-process」行を削除するだけです。

起動時に実行するために、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 サービスから必要なものがすべて得られ、サードパーティのアプリケーションは必要ないと思います。

于 2016-11-26T16:25:50.827 に答える