Windows Server 2008 SP1 マシンで PHP Web アプリケーションをセットアップしようとしています。このアプリケーションは Windows Server 2003 で正しく実行されていますが、php_win32servicePHP
拡張機能で構築された Windows サービスを正しく起動できません。
コードの関連セクションを次に示しPHP
ます。インストールとアンインストールを行うセクションは次のとおりです。
if ($argv[1] == 'install') {
win32_create_service(array(
'service' => $service_name,
'display' => $service_name,
'params' => '"'. __FILE__ . '"' . ' run'));
exit;
}
else if ($argv[1] == 'uninstall') {
win32_delete_service($service_name);
exit;
}
else if ($argv[1] != 'run') {
die("Invalid arguments");
}
win32_start_service_ctrl_dispatcher($service_name);
そして、ここにメインループがあります:
while (1) {
switch (win32_get_last_control_message()) {
case WIN32_SERVICE_CONTROL_INTERROGATE: win32_set_service_status(WIN32_SERVICE_RUNNING); break; // Respond with status
case WIN32_SERVICE_CONTROL_STOP: win32_set_service_status(WIN32_SERVICE_STOPPED); exit; // Terminate script
}
processQueue();
usleep(500000);
}
管理者として実行している限り、インストールとアンインストールは機能しcmd
ます。cmd
サーバーへのログインに使用するアカウントで起動すると、サービスが作成されませんwin32_create_service
。コマンドラインからパラメーターを指定してスクリプトを実行することもできますが、スクリプトrun
は正しく実行されますが、サービスを開始しようとすると、Starting
メッセージが表示されたままハングアップし、Started
状態になりません。
この問題は、マシン上のアカウントの権限と関係があると思いますが、LocalSystem
これを適切に機能させるために必要な権限がわかりません。WIN32_SERVICE_CONTROL_INTERROGATE
また、特にこのサーバーでセキュリティ設定を変更する権限がないため、これをデバッグして で発生しているエラー/問題を見つける方法もわかりません。セキュリティ設定を変更する必要がある場合は、ネットワーク管理者が変更を実行できるように、ネットワーク管理者に連絡する必要があります。この問題のデバッグまたは解決について誰か助けてもらえますか?
アップデート:
この問題は の 64 ビット バージョンでのみ発生するようですPHP
。サービスを開始しようとすると、 の 64 ビット コンパイルでphp_win32service
何らかの問題が発生するようです。「php_win32service」の 64 ビット バージョンを削除PHP
し、32 ビット バージョンに置き換えました。その後、サービスは正しく開始されました。