Python Service
win32serviceutil.ServiceFramework를 상속받아서 SvcStop(), SvcDoRun() 을 override 하면 가장 기본적인 서비스를 구현할 수 있다. 아래의 예제는 Python Programming on Win32 에서 발췌한 것이다.
!python
import win32serviceutil, win32service, win32event
class MyService(win32serviceutil.ServiceFramework):
svc_name = "MyService"
svc_display_name = "My First Service"
def init(self,args):
win32serviceutil.ServiceFramework.init(self,args)
self.event = win32event.CreateEvent(None,0,0,None)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.event)
def SvcDoRun(self):
win32event.WaitForSingleObject(self.event,win32event.INFINITE)
if name=='main':
win32serviceutil.HandleCommandLine(MyService)
이렇듯 간단한 서비스를 실행하기 위해서는 우선 Win32 Python 모듈과 함께 배포되는 PythonService.exe를 레지스트리에 등록해야 한다. 다음과 같이 하라. (그런데, 아마도 win32 모듈을 설치하면 자동으로 이 넘이 등록되는 듯하다. 확인 요망)
PythonService.exe /register
이제 서비스를 실행해보자. win32serviceutil.HandleCommandLine()이 이미 모든 것을 구현해뒀기 때문에, 그냥 다음과 같이 하면 된다.
python MyService.py install | start | stop | remove
물론 net start | stop MyService 라고 해도 서비스를 시작/종료할 수 있다.
Category:programming
Tags:pythonservice