[解決済み】WindowsでPythonスクリプトをサービスとして実行するにはどうすればいいですか?
質問
私は、データベースに格納された相互に関連するさまざまなオブジェクトを共有する一連のプログラムのアーキテクチャをスケッチしています。プログラムの1つは、これらのオブジェクトに対する操作のための高レベルのインタフェースを提供するサービスとして動作し、他のプログラムはそのサービスを通じてオブジェクトにアクセスするようにしたいのです。
そのサービスを実装する技術として、現在PythonとDjangoフレームワークを目指しています。LinuxでPythonのプログラムをデーモン化する方法は、だいたい分かっています。しかし、Windowsに対応することがオプションの仕様項目になっています。私はWindowsのプログラミングの経験がほとんどなく、Windowsのサービスも全く経験がありません。
PythonのプログラムをWindowsのサービスとして実行する(ユーザーログインなしで自動的に実行する)ことは可能ですか? この部分は必ずしも実装する必要はないのですが、この路線で設計するかどうかを決めるために、どのようにするのか大まかなイメージが欲しいのです。
編集部:これまでの回答、ありがとうございました。もうひとつ教えていただきたいことがあります。 Windowsはどのように私のサービスを認識しているのでしょうか?Windowsネイティブのユーティリティで管理できますか? etc/init.d に start/stop スクリプトを記述するのと同等の効果がありますか?
どのように解決するのですか?
はい、できます。私は、以下のものに付属するpythoncomライブラリを使用しています。 ActivePython でインストールすることもできます。 パイウィン32 (Python for Windows extensions)を使用します。
これは簡単なサービスの基本的なスケルトンです。
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "TestService"
_svc_display_name_ = "Test Service"
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
socket.setdefaulttimeout(60)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
self.main()
def main(self):
pass
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)
あなたのコードは
main()
メソッドで設定したフラグをチェックすることで中断されるような、ある種の無限ループを含むのが普通です。
SvcStop
メソッド
関連
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] Pythonスクリプトのプロファイリングはどのように行うのですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】WindowsでTCPまたはUDPポートをリッスンしているプロセスを見つけるにはどうすればよいですか?
-
[解決済み] [Solved] .whlファイル付きのPythonパッケージをインストールする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Pythonによるjieba分割ライブラリ
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み] sc.exeでサービスを作成する場合、コンテキストパラメータをどのように渡せばよいですか?