所有python windows服务无法启动{error 1053}

时间:2012-11-20 03:14:12

标签: python windows-services

所有 python代码服务都可以安装但无法启动

Error 1053: The service did not respond to the start or control request in a timely fashion".

因为我的服务可以在我的服务器中安装和启动。 我认为我的代码没有问题。

但我仍然想知道是否有解决方案我可以在代码中解决此错误

我的服务:

import win32serviceutil
import win32service
import win32event

import time
import traceback
import os

import ConfigParser
import time
import traceback
import os
import utils_func
from memcache_synchronizer import *

class MyService(win32serviceutil.ServiceFramework):
    """Windows Service."""
    os.chdir(os.path.dirname(__file__))
    conf_file_name = "memcache_sync_service.ini"
    conf_parser = ConfigParser.SafeConfigParser()
    conf_parser.read(conf_file_name)
    _svc_name_, _svc_display_name_, _svc_description_ = utils_func.get_win_service(conf_parser)

    def __init__(self, args):
        if os.path.dirname(__file__):
            os.chdir(os.path.dirname(__file__))
        win32serviceutil.ServiceFramework.__init__(self, args)

        # create an event that SvcDoRun can wait on and SvcStop can set.
        self.stop_event = win32event.CreateEvent(None, 0, 0, None)

    def SvcDoRun(self):
        self.Run()
        win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.stop_event)
        LoggerInstance.log("memcache_sync service is stopped")
        self.ReportServiceStatus(win32service.SERVICE_STOPPED)
        sys.exit()

    def Run(self):
        try:
            LoggerInstance.log("\n******\n\memcache_sync_service is running, configuration: %s\n******" % (self.conf_file_name,))
            if ((not self.conf_parser.has_section('Memcache')) or
                (not self.conf_parser.has_option('Memcache', 'check_interval'))):
                LoggerInstance.log('memcache_sync_service : no Memcache service parameters')
                self.SvcStop()

            # set configuration parameters from ini configuration
            self.check_interval = self.conf_parser.getint('Memcache', 'check_interval')

            ms = MemcacheSynchronizer()
            while 1:
                ms.Sync()
                time.sleep(self.check_interval)
        except:
            LoggerInstance.log("Unhandled Exception \n\t%s" % (traceback.format_exc(),))


if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(MyService)

执行“sc query [name]”cmd:

的结果
  

SERVICE_NAME:NewsMonitoringMemcacheSynchronizer

   TYPE               : 10  WIN32_OWN_PROCESS 
   STATE              : 1  STOPPED 
                           (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
   WIN32_EXIT_CODE    : 0 (0x0)
   SERVICE_EXIT_CODE  : 0 (0x0)
   CHECKPOINT         : 0x0
   WAIT_HINT          : 0x0

更新

我可以使用调试模式运行此服务,cmd:

memcache_syn_service.py debug

7 个答案:

答案 0 :(得分:9)

使用pypiwin32(版本:220)和python(版本:3.6)时遇到同样的问题。我不得不复制" \ Python36-32 \ Lib \ site-packages \ pypiwin32_system32 \ pywintypes36.dll" to" \ Python36-32 \ Lib \ site-packages \ win32"服务启动(在调试模式下工作)

答案 1 :(得分:5)

我的所有python编码的Windows服务都无法在我的计算机上运行。

但是所有这些都可以从我们的开发服务器开始,这意味着我的代码是正确的。

但我找到了另一种解决方案,在debug mode中运行:

any_service.py debug

答案 2 :(得分:5)

如果:

  • python your_service.py debug有效,而
  • python your_service.py install +将其启动为服务失败,错误为1053,

此命令可能会帮助python C:\Python27\Scripts\pywin32_postinstall.py

答案 3 :(得分:1)

我遇到类似python服务的问题,发现它丢失了DLL,因为'System Path'(不是用户路径)不完整。检查开发服务器中的路径以及它是否与计算机上的路径匹配(如果将服务安装为LocalSystem服务,则为系统路径)。对我来说,我错过了python dlls的路径c:\ python27(windows)。

答案 4 :(得分:0)

确保以不同于默认本地系统用户的用户身份运行该应用程序。将其替换为您能够成功运行debug命令的用户。

  • 要替换用户,请转到Windows服务(start > services.msc
  • 右键单击您创建的服务>属性>登录
  • 取消选中本地系统帐户,然后输入您自己的帐户。

答案 5 :(得分:0)

所有已知的修复程序都使我失败了,而这个修复程序奏效了:

在服务窗口中:

  1. 右键单击您已安装的服务;
  2. 转到登录标签;
  3. 选择“ 此帐户”,然后输入您的用户ID并通过;
  4. 重新启动PC。

已获得Windows权限说明...

答案 6 :(得分:0)

在我的情况下,问题出在python37.dll不在C:\Python37-x64\Lib\site-packages\win32

只需将其复制到此处即可解决问题