Bereitstellen Kolben-app als windows-Dienst
Bin ich mit dem template finden Sie hier: Ist es möglich, ein Python-Skript als Dienst in Windows? Wenn möglich, wie?
Hier ist meine run.py,, die habe ich als Dienst installiert nach den Anweisungen im obigen link.
from app import app
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "Flask App"
_svc_display_name_ = "Flask App"
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
socket.setdefaulttimeout(60)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
self.main()
def main(self):
app.run(host = '192.168.1.6')
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)
Jedoch, wenn ich versuche den Dienst zu starten bekomme ich die Meldung:
"Der Kolben-App-Dienst auf "Lokaler Computer" gestartet und dann angehalten.
Einige Dienste werden automatisch angehalten wenn Sie nicht von anderen Diensten oder Programmen."
Irgendeine Idee, was ich falsch mache? Ich habe verschiedene Benutzerkonten--ich glaube nicht, dass es ein Berechtigungsproblem.
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich keinen Zugriff auf
WSGIRequestHandler
im Kolben außerhalbrequest
, so dass ich mitProcess
.os.chdir(os.path.dirname(os.path.realpath(__file__)))
- das problem war Folgendes, das script ausgeführt wurde von einigenwin32
Ordner (als service), so laden Sie alle Dateien (erwartet werden in derdir
des Skripts) einen Fehler verursacht.Herausgefunden-würde ich Links die debug-option in der app.run(). Einmal habe ich entfernt, es ist gut zu gehen!
Während der Dienst startet und läuft einwandfrei (ich kann auf meinem Kolben app von einem anderen computer im Netzwerk), es ist nicht in der Lage zu stoppen. In dem thread mit der geposteten Vorlage, die ich verwendet, die der Autor erwähnt, etwas über die Einstellung des flag, um richtig zu beenden Sie den Dienst.
Jeder wissen, was er damit meint, und wie es code, um richtig zu beenden Sie den Dienst?
Ich angehängt mein code in SvcStop() Letzte Zeile.
"selbst.ReportServiceStatus(win32service.SERVICE_STOPPED)"
In meinem Fall, Es funktioniert für das beenden des Dienstes.