web-dev-qa-db-ja.com

PHPスクリプトをWindowsサービスとして設定する

PHPスクリプトをWindowsサービスとして設定する必要があります。

ログインしているユーザーやシステムの起動時に実行する必要があるので、Windowsサービスが最適のように思えますが、他の提案を聞いてうれしいです。

(このスクリプトは継続的に実行されます。スケジュールされたタスクマネージャーを使用できる「5分ごとに実行」するものではありません。)

http://support.Microsoft.com/kb/251192 sc.exeプログラムを使用してサービスをインストールする方法について説明します。

しかし、私が読んだことから、Windowsサービスマネージャーからの特別なコマンドを受け入れるために、PHPスクリプトの周りにラッパーを用意する必要があります。誰かがこれを手伝ってくれるでしょうか?

18
James

たぶん リソースキットツール (具体的にはsrvany.exe)がここであなたを助けることができます。 MSDN: ユーザー定義サービスを作成する方法 そしておそらく 2008 Serverのこのヒント セットアップに役立つはずですanyサービスとして実行可能。 (私はこれをWindows 2003 Server、Windows 2008 Server、およびWindows XP Professional [その他のリソースキット]で正常に使用しました))

php your-script.phpを含むバットを作成し、それをsrvany.exeとvoilaでラップすると、マシンがサービスをロードするとスクリプトが開始されます。

srvany.exeは、デーモンの実行が予想される開始/停止/再起動の呼び出しを処理する必要があります。開始時に実行可能ファイルをロードし、停止時にプロセスを強制終了し、再起動時に両方を実行します。したがって、この部分について心配する必要はありません。 register_shutdown_function() が、サービスプロセスがいつ強制終了されたかを特定するのに役立つかどうかを確認することをお勧めします。

他のサービス(データベースなど)への依存関係を定義することもできます。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\THENAMEOFYOURSERVICE]
"DependOnService"="DEPENDONTHIS"

THENAMEOFYOURSERVICEをサービスに付けた名前に置き換え、DEPENDONTHISを依存するサービスの名前に置き換えます(「Postgres9.0」など)。そのファイルをdependency.regに保存し、regedit /s dependency.regでロードします。 (またはエクスプローラーでダブルクリックします…)

13
rodneyrehm

このタスクには FireDaemon を使用しました。ラッパースクリプトなどは必要ありません。残念ながら、フリーウェアではありません。

3
abaumg

さまざまなパラメーターと、パラメーターとしてスクリプトファイルを指定することにより、コマンドラインでphpを実行できます。必要な行全体をサービス構成に追加すると、実行されるはずです。そのため、サービスを作成する前にデバイスを試すこともできます。 php-scriptがWebルートの外にある場合は、フォルダをPATH-Variable ofwindowsに追加する必要があります。

2
David

私はこれを見つけましたが、自分で試したことはありません。 PHP実際にはこれを行うためのいくつかの関数が付属しています: http://uk.php.net/manual/en/book.win32service.php

ここにいくつかの例があります: http://uk.php.net/manual/en/win32service.examples.php

<?php
if ($argv[1] == 'run') {
  win32_start_service_ctrl_dispatcher('dummyphp');

  while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
    # do your work here.
    # try not to take up more than 30 seconds before going around the loop
    # again
  }
}
?>
1
James

数日後...私はこの素晴らしいオプションを見つけました!

彼は、サービスオプションを受け取り、正常に動作する.exeを作成します。

https://superuser.com/questions/628176/php-cgi-exe-as-a-windows-service/643676#643676

正しいコマンド:

sc create FOO binPath = "service.exe \" C:\ php\php-cgi.exe -b 127.0.0.1:9000 -c C:\ php\php.ini "\" type = own start = auto error = ignore DisplayName = "FOO php"

0
Virgili Garcia

NSSM-Non-Sucking Service Manager も解決策であり、

nssm install PHP php-cgi.exe -b 127.0.0.1:9000 -c C:\php\php.ini
0
Andris