web-dev-qa-db-ja.com

nginx.exeをWindowsシステムサービス(Apacheなど)として追加しますか?

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

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

これに対する答えを見つけましたか?

52
user1305810

Windows Service Wrapperでそれをする方法

(注:これまでにより簡単な代替方法があります-以下に説明するソリューションも参照してください chocolatey package managerを使用 by suneg および NSSMを直接使用 from- アダム

  1. Windows Service Wrapper の最新バージョンを github または 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>
    
  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 }
}
76
Jörg

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

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

46
Adamy

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

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

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

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

6
CoreTech

私が見つけた最も簡単な方法は、 Chocolatey パッケージマネージャーを使用することでした。

Chocolateyがインストールされたら、管理プロンプトを開き、次のように入力します。

choco install nginx

これで、「nginx」という名前のWindowsサービスが実行されます。

4
suneg

公式の 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
user3132194

here からZipファイルをダウンロードします。

抽出nginx-service.exe from winginx\buildそしてそれを実行します。

1
Dileepa

NSSMは、Nginxをサービスとして実行するのに最適なツールです。
外部のサードパーティソフトウェアを使用しない場合、これら2つの方法のいずれかを実装できます。

  • Windowsタスクスケジューラ
  • Windowsスタートアップショートカット

Windowsタスクスケジューラ

  • この回答 で述べたように、start.batファイルを1つ準備します。
  • Nginx.exeが存在する場所にこのファイルを配置します。
  • Windowsタスクスケジューラを開き、 この回答 の説明に従ってタスクをセットアップして、無期限に実行します。
  • このタスクをシステムアカウントで最高の特権として実行することを忘れないでください。詳細は here にあります。
  • 特定の時刻に毎日開始するタスクを作成し、batファイルを介して、複数のnginx.exeインスタンスを作成しないように、サービスが既に実行されているかどうかを確認します。
  • 何らかの理由でNginxがシャットダウンした場合、5分以内に起動します。

Windowsスタートアップショートカット

  • Nginx.exeのショートカットを1つ作成し、Windowsのスタートアップフォルダーに配置します。

  • この回答 に従って、起動場所を見つけます。

  • Nginxは、システムにログインするたびに自動的に実行されます。
  • これが一番簡単です。ただし、ユーザープロファイルに依存しています。つまり、サーバーでNginxを実行している場合、ログオフすると停止するユーザーアカウントに対してのみ実行されます。
  • これは開発環境に最適です。
1
Soumendra

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として認識することになっています。

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

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

1
sdw