Ниже представлена структура для службы Windows, которую я использую.В случае ошибки она регистрируется и может быть просмотрена в средстве просмотра событий.Проблема заключается в том, что скрипт просто завершает работу и не перезапускается снова, хотя у меня установлен режим восстановления для перезапуска службы при первом, втором и последующих сбоях.В настоящее время у меня мало обработки ошибок, потому что я хочу увидеть, какие ошибки могут возникать в средстве просмотра событий, чтобы я мог написать код для соответствующей обработки этих ошибок.
from win32api import CloseHandle, GetLastError, SetConsoleCtrlHandler
import os
import sys
import time
import pythoncom
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "my_service_name"
_svc_display_name_ = "my service"
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
SetConsoleCtrlHandler(lambda x: True, True)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
self.run = False
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
self.run = True
self.main()
def main(self):
while self.run == True
pass
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)
Редактировать:
Я пытался попробовать: за исключением self.main, но результат был все тот же.Служба не перезапускалась при сбое ... Пожалуйста, у кого-нибудь есть какие-нибудь идеи?Служба не так уж полезна, если она не может быть перезапущена в случае сбоя ... Можно также запустить ее как .pyc
Редактировать:
ниже - это пример ошибкиэто может возникнуть в моем сценарии ... Я не верю, что это сообщение об ошибке особенно полезно, потому что я пытаюсь добиться перезапуска службы, но тем не менее здесь приведен пример ошибки, которая привела к сбою службы безэто перезапуск:
The instance's SvcRun() method failed
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\win32\lib\win32serviceutil.py", line 806, in SvcRun
self.SvcDoRun()
File "C:\Some_Service.py", line 46, in SvcDoRun
self.main()
File "Some_Service.py", line 61, in main
ser = self.open_serial_port()
File "Some_Service.py", line 70, in open_serial_port
serial_connection.open()
File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 56, in open
raise SerialException("could not open port %s: %s" % (self.portstr, ctypes.WinError()))
SerialException: could not open port COM6: [Error 1225] The remote system refused the network connection.
%2: %3