Pythonで簡単にWindowsサービスを作る

目次
Pythonで書いた処理をバックグラウンドで動かしておきたいときに、Windowsサービスとして書いておくとPC起動時の自動起動や開始・停止が簡単にできます。
PythonでWindowsサービスを書くにはpywin32モジュールを使うと簡単です。
コード
次のコードで、1秒毎に日付をファイルに出力するサービスが作れます。好きな処理をさせるにはwhile
の中身を変えます。
サービスではターミナルに情報を出力できないので、ファイルやWindowsイベントログなどに出力しましょう。
コマンドラインオプション
スプリクトを直接実行した場合はwin32serviceutil.HandleCommandLine()
が呼ばれ、サービスの登録や開始といったいくつかのコマンドラインオプションが指定可能です。
以下の例以外のオプションもあります。オプション無しでスプリクトを実行するとオプション一覧が表示されます。
サービスの登録
python service.py install
サービスの登録に必要なのは、以下の2つです。
_svc_name_
: サービス名_svc_display_name_
: 表示名
サービスの開始
python service.py start
サービスが開始されると、SvcDoRun()
がメインスレッドから呼ばれます。
SvcDoRun()
が終了するとサービスが終了してしまうので、サービスの停止が指示されるまでwhileループを回すなどして処理を続ける必要があります。
サービスの停止
python service.py stop
サービスが停止されると、SvcStop()
がメインスレッドとは別のスレッドから呼ばれます。上の例ではサービス停止時にself.run
を偽にすることで処理を止めています。