2016-05-04 105 views
0

私のコードからPythonサービス.exeを作成しようとしています。 私はそれを実行に固執しました。Pythonサービスがエラー1053で失敗しますが、デバッグモードで動作します

私は2つの重要なファイルがあります。サービスコード:

import win32serviceutil 
import win32service 
import win32event 
import servicemanager 
import socket 
import time 
from mailbox.fetcher import main_fetching 
from disc.my_logger import set_up_logging 

logging = set_up_logging("Fetcher") 


class FetcherSvc (win32serviceutil.ServiceFramework): 
    _svc_name_ = "MailMan-FetchingService" 
    _svc_display_name_ = "MailMan FetchingService" 

    def __init__(self,args): 
     win32serviceutil.ServiceFramework.__init__(self,args) 
     self.stop_event = win32event.CreateEvent(None,0,0,None) 
     socket.setdefaulttimeout(60) 
     self.stop_requested = False 

    def SvcStop(self): 
     self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) 
     win32event.SetEvent(self.stop_event) 
     logging.info('Stopping fetching ...') 
     self.stop_requested = True 

    def SvcDoRun(self): 
     self.ReportServiceStatus(win32service.SERVICE_START_PENDING) 
     servicemanager.LogMsg(
      servicemanager.EVENTLOG_INFORMATION_TYPE, 
      servicemanager.PYS_SERVICE_STARTED, 
      (self._svc_name_,'') 
     ) 
     self.main() 

    def main(self): 
     logging.info(' ** Starting fetching mails service ** ') 
     self.ReportServiceStatus(win32service.SERVICE_RUNNING) 
     while not self.stop_requested: 
      main_fetching() 

py2exeセットアップコード:

setup(console=[{"script": "fetching_service.py", 
       "icon_resources": [(1, "../mailman.ico")], 
       "dest_base": "fetching_service"}], 
     data_files=[('', ['../cacert.pem', '../trusted-certs.crt'])], 
     options={"py2exe": { 
      "includes": ["win32serviceutil", "win32service", "win32event"], 
      'bundle_files': 0, "optimize": 2, 
      'dist_dir': 'fetcher_service'}}) 

サービスが正しくインストールされます。

$ fetcher_service/fetching_service.exe --startup=delayed install 
Installing service MailMan-FetchingService 
Changing service configuration 
Service updated 

しかし出発の:

$ fetcher_service/fetching_service.exe start 
Starting service MailMan-FetchingService 
Error starting service: Usługa nie odpowiada na sygnał uruchomienia lub sygnał sterujący w oczekiwanym czasie. 

(サービスは開始または制御要求に適時に応答しませんでした) 特定のユーザーを設定しようとしましたが、それは役に立たなかった... さらに、実行後にエラーが発生する、遅れはありません

サービスは完全にデバッグモードで動作します。

答えて

2

サービスが実際に動作していることをWindowsに通知する必要があります。

self.ReportServiceStatus(win32service.SERVICE_RUNNING) 

がsucessfullyを始めとして、あなたのサービスをマークするSvcDoRunの内部では、

self.ReportServiceStatus(win32service.SERVICE_START_PENDING) 

を呼び出すと、あなたのサービスが実際に開始されると(たとえばあなたも直接、その後メイン到達、または一度)。

+1

Unfortunatelly:それは役に立たなかった...上記のコードにあなたの提案を加えました。 –

+0

@osullivjの回答を確認してください。それは私のために働いた。 –

0

私はこの問題を解決しました。 私はphihagの答えを使用してきましたし、変更は自分自身をのsetup.py:

setup(service=[{'modules':'fetching_service','cmdline_style':'pywin32','description':'your service description', 
    # console=[{"script": "fetching_service.py", 
       "icon_resources": [(1, "../mailman.ico")], 
       "dest_base": "fetching_service"}], 
     data_files=[('', ['../cacert.pem', '../trusted-certs.crt'])], 
     options={"py2exe": { 
      "includes": ["win32serviceutil", "win32service", "win32event"], 
      'bundle_files': 0, "optimize": 2, 
      'dist_dir': 'fetcher_service'}}) 
3

この問題は、壊れたpywin32インストールによって引き起こされる場合があります。優れたprocmonを使用するpythonservice.exeがpywintypes34.dllを読み込めなかったことがわかりました。 c:\ python34 \ scripts \ pywin32_postinstall.pyを実行すると問題が解決しました。 NB pipを使用したためにpywin32をpypiwin32としてインストールした場合は、C:¥Python34¥Lib¥site-packages¥pypiwin32_system32 dirをC:¥Python34¥Lib¥site-packages¥pywin32_system32に修正する必要があります。スクリプトが動作するようにします。

+0

これは私にとって正しい答えでした。 deguが動作しても起動しない場合は、これが行く方法です。選択された回答である必要があります。 –

関連する問題