Python 写windows service 及 start service 出现错误 1053:服务没有及时响应启动或控制请求

主要是记录1053这个错误,花了写时间找到解决方法。

目录

安装pywin32

实现

1053错误


安装pywin32

实现widows service 需要借助第三方模块pywin32,安装方式:打开cmd命令提示符, pip install pywin32,之后看到success说明安装成功,pip list 可以看到pywin32是否已安装。

参考

https://jingyan.baidu.com/article/6b97984de993431ca2b0bfc2.html

使用PyCharm的话还需要在PyCharm里设置 安装pywin32,否则PyCharm是无法识别pywin32 api的

参考

https://www.cnblogs.com/hackpig/p/8186214.html

实现

代码网上已经有很多了

  1. # ZPF
  2. # encoding=utf-8
  3. import win32timezone
  4. from logging.handlers import TimedRotatingFileHandler
  5. import win32serviceutil
  6. import win32service
  7. import win32event
  8. import os
  9. import logging
  10. import inspect
  11. import time
  12. import shutil
  13. class PythonService(win32serviceutil.ServiceFramework):
  14. _svc_name_ = "PythonService1" #服务名
  15. _svc_display_name_ = "Clearjob" #job在windows services上显示的名字
  16. _svc_description_ = "Clear system files" #job的描述
  17. def __init__(self, args):
  18. win32serviceutil.ServiceFramework.__init__(self, args)
  19. self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
  20. self.logger = self._getLogger()
  21. self.path = 'D:\\WebSite'
  22. self.T = time.time()
  23. self.run = True
  24. def _getLogger(self):
  25. '''日志记录'''
  26. logger = logging.getLogger('[PythonService]')
  27. this_file = inspect.getfile(inspect.currentframe())
  28. dirpath = os.path.abspath(os.path.dirname(this_file))
  29. if os.path.isdir('%s\\log'%dirpath): #创建log文件夹
  30. pass
  31. else:
  32. os.mkdir('%s\\log'%dirpath)
  33. dir = '%s\\log' % dirpath
  34. handler = TimedRotatingFileHandler(os.path.join(dir, "Clearjob.log"),when="midnight",interval=1,backupCount=20)
  35. formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
  36. handler.setFormatter(formatter)
  37. logger.addHandler(handler)
  38. logger.setLevel(logging.INFO)
  39. return logger
  40. def SvcDoRun(self):
  41. self.logger.info("service is run....")
  42. try:
  43. while self.run:
  44. self.logger.info('---Begin---')
  45. for path, name, file in os.walk('D:\\Website'):
  46. if path == 'D:\\Website':
  47. for IISname in name:
  48. floder = []
  49. for i in os.listdir(os.path.join(path, IISname)):
  50. if i.isdigit():
  51. floder.append(int(i))
  52. if len(floder) == 0:
  53. pass
  54. elif len(floder) >= 2: # 设置保留备份
  55. floder.sort()
  56. for x in floder[:(len(floder) - 2)]:
  57. self.logger.info("delete dir: %s" % os.path.join(os.path.join(path, IISname), str(x)))
  58. shutil.rmtree(os.path.join(os.path.join(path, IISname), str(x)))
  59. self.logger.info('---End---')
  60. time.sleep(10)
  61. except Exception as e:
  62. self.logger.info(e)
  63. time.sleep(60)
  64. def SvcStop(self):
  65. self.logger.info("service is stop....")
  66. self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
  67. win32event.SetEvent(self.hWaitStop)
  68. self.run = False
  69. if __name__ == '__main__':
  70. win32serviceutil.HandleCommandLine(PythonService)

代码参考

https://www.cnblogs.com/shenh/p/8931620.html

https://www.cnblogs.com/zoro-robin/p/6110188.html