PHPスクリプトをWindowsサービスとして設定する必要があります。
ログインしているユーザーやシステムの起動時に実行する必要があるので、Windowsサービスが最適のように思えますが、他の提案を聞いてうれしいです。
(このスクリプトは継続的に実行されます。スケジュールされたタスクマネージャーを使用できる「5分ごとに実行」するものではありません。)
http://support.Microsoft.com/kb/251192 sc.exeプログラムを使用してサービスをインストールする方法について説明します。
しかし、私が読んだことから、Windowsサービスマネージャーからの特別なコマンドを受け入れるために、PHPスクリプトの周りにラッパーを用意する必要があります。誰かがこれを手伝ってくれるでしょうか?
たぶん リソースキットツール (具体的には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
でロードします。 (またはエクスプローラーでダブルクリックします…)
このタスクには FireDaemon を使用しました。ラッパースクリプトなどは必要ありません。残念ながら、フリーウェアではありません。
さまざまなパラメーターと、パラメーターとしてスクリプトファイルを指定することにより、コマンドラインでphpを実行できます。必要な行全体をサービス構成に追加すると、実行されるはずです。そのため、サービスを作成する前にデバイスを試すこともできます。 php-scriptがWebルートの外にある場合は、フォルダをPATH-Variable ofwindowsに追加する必要があります。
私はこれを見つけましたが、自分で試したことはありません。 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
}
}
?>
数日後...私はこの素晴らしいオプションを見つけました!
彼は、サービスオプションを受け取り、正常に動作する.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"
NSSM-Non-Sucking Service Manager も解決策であり、
nssm install PHP php-cgi.exe -b 127.0.0.1:9000 -c C:\php\php.ini