NGINXを静的コンテンツのフロントエンドサーバーとして設定し、Apacheをその他のバックエンドサーバーとして使用します。
問題は、nginx.exe
をWindowsシステムサービス(Apacheなど)にできる論理的な答えが見つからないことです。
これに対する答えを見つけましたか?
Windows Service Wrapperでそれをする方法
(注:これまでにより簡単な代替方法があります-以下に説明するソリューションも参照してください chocolatey package managerを使用 by suneg および NSSMを直接使用 from- アダム )
winsw-*.exe
の名前をnginxservice.exe
のような名前に変更します。同じベース名を持つ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>
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 }
}
NSSMフォームのダウンロード http://nssm.cc/download 「%NSSM_HOME%\ nssm.exe install“ Nginx”を実行します」
NSSMダイアログでNginx実行可能ファイルを選択し、[OK]をクリックします。 [サービス]に移動し、作成した新しいサービス「Nginx」を開始します。
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.
)
SC.EXEは、WindowsサービスAPIを既にサポートしている実行可能ファイルに対してのみ機能し、サービスコントロールマネージャー(SCM)からの開始および停止要求に適切に応答できます。サービスとして特別に記述されていない他の通常のアプリケーションは、起動に失敗します(通常はエラー1053)。
これらのexeには、「サービスラッパー」が必要です。これは、SCMから開始/停止コマンドを受け入れ、それに応じてアプリケーションを実行/終了できる小さなユーティリティです。 Microsoftは Srvany (これは無料でありながら非常に基本的です)を提供していますが、他にも無料および商用の代替手段がいくつかあります。
ところで、これをチェックアウトする必要があります Nginixをサービスとして実行する方法を示すガイド 、特にNginixを適切に停止する方法を説明するステップ7。すべてのラッパーがその機能をサポートするわけではありません(Srvanyはサポートしません)...
私が見つけた最も簡単な方法は、 Chocolatey パッケージマネージャーを使用することでした。
Chocolateyがインストールされたら、管理プロンプトを開き、次のように入力します。
choco install nginx
これで、「nginx」という名前のWindowsサービスが実行されます。
公式の 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
でそれらを指定する必要があります。
here からZipファイルをダウンロードします。
抽出nginx-service.exe
from winginx\build
そしてそれを実行します。
NSSMは、Nginxをサービスとして実行するのに最適なツールです。
外部のサードパーティソフトウェアを使用しない場合、これら2つの方法のいずれかを実装できます。
Windowsタスクスケジューラ
Windowsスタートアップショートカット
Nginx.exeのショートカットを1つ作成し、Windowsのスタートアップフォルダーに配置します。
この回答 に従って、起動場所を見つけます。
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サービスから必要なものすべてを取得し、サードパーティのアプリケーションを必要としないと思います。