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

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

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を偽にすることで処理を止めています。