(PECL win32service SVN)
win32_start_service_ctrl_dispatcher — スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる ようにする
サービスコントロールマネージャ経由で起動させる際、サービスプロセスは 「チェックイン」を要求され、これによってサービスのモニタリングや 通信の機能を確立します。この関数は、サービスコントロールマネージャとの 低レベル通信を処理するスレッドを生成し、チェックインを実行します。
サービスが開始したら、サービスプロセスで行わなければならないことは次のふたつです。
まず最初は、サービスが実行中であることをサービスコントロールマネージャに通知することです。
これは、win32_set_service_status() に定数
WIN32_SERVICE_RUNNING
を指定してコールすれば実現できます。
サービスが実際に動き出すまでに何らかの長い処理を要する場合は、定数
WIN32_SERVICE_START_PENDING
を使うこともできます。
もうひとつは、常にサービスコントロールマネージャにチェックインし続け、
サービスをいつ終了させるべきかを確認することです。
これは、定期的に win32_get_last_control_message()
をコールして返り値を適切に処理することで実現できます。
成功した場合に TRUE
を返します。パラメータに問題がある場合は FALSE
、失敗した場合は Win32 エラーコード を返します。
例1 win32_start_service_ctrl_dispatcher() の例
サービスが SCM で実行されているかどうかを調べます。
<?php
if (!win32_start_service_ctrl_dispatcher('dummyphp')) {
die("I'm probably not running under the service control manager");
}
win32_set_service_status(WIN32_SERVICE_START_PENDING);
// このサービスを処理するための、何らかの長い処理をします
win32_set_service_status(WIN32_SERVICE_RUNNING);
while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
# ここでなんらかの処理をします。1 回のループに 30 秒以上かからない
# ように心がけてください。
}
?>