12

すべての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]」コマンドの実行結果:

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
4

7 に答える 7

4

私のPythonでコード化されたすべてのWindowsサービスを私のコンピューターで実行することはできません。

しかし、それらはすべてdev-serverで開始できます。これは、私のコードが正しいことを意味します。

しかし、私は別の解決策を見つけました、で実行しdebug modeます:

any_service.py debug
于 2012-12-13T09:53:33.637 に答える
2

デフォルトのローカル システム ユーザーとは異なるユーザーでアプリケーションを実行していることを確認してください。debug コマンドを正常に実行できるユーザーに置き換えます。

  • ユーザーを置き換えるには、Windows サービスに移動します ( start > services.msc)
  • 作成したサービスを右クリック > プロパティ > ログオン
  • ローカル システム アカウントのチェックを外し、独自のアカウントを入力します。
于 2018-10-09T09:22:14.360 に答える
1

Pythonサービスでも同様の問題が発生し、「システムパス」(ユーザーパスではない)が完全ではなかったため、DLLが欠落していることがわかりました。dev-serverのパスと、それがコンピューターのパスと一致するかどうかを確認します(サービスがLocalSystemサービスとしてインストールされている場合はシステムパス)。私の場合、python dllのパスc:\ python27(windows)がありませんでした。

于 2013-01-29T10:22:44.063 に答える