Déployer Flacon application en tant que service windows
Je suis en utilisant le modèle trouvé ici: Est-il possible d'exécuter un script Python en tant que service sous Windows? Si possible, comment?
Voici mon run.py que j'ai installé comme un service en suivant les instructions dans le lien ci-dessus.
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)
Cependant, lorsque je tente de démarrer le service que je reçois le message:
"Le Flacon de service d'Application sur l'Ordinateur Local a démarré puis s'est arrêté.
Certains services s'arrêtent automatiquement si elles ne sont pas en cours d'utilisation par d'autres services ou programmes."
Une idée de ce que je fais mal? J'ai essayé différents comptes d'utilisateur--je ne pense pas que c'est un problème de permission.
Merci!
Vous devez vous connecter pour publier un commentaire.
Je ne peux pas accéder
WSGIRequestHandler
dans le Flacon à l'extérieurrequest
, donc j'utiliseProcess
.os.chdir(os.path.dirname(os.path.realpath(__file__)))
- le problème était le suivant, le script a été couru à partir de certainswin32
dossier (le service), de sorte que le chargement de tous les fichiers (s'attendant à être dans ledir
du script), a provoqué une erreur.Compris--j'avais quitté l'option de débogage dans l'application.run(). Une fois que je l'ai enlevé, il est bon d'aller!
Tandis que le service démarre et fonctionne correctement (je peux accéder à mon flacon d'application à partir d'un autre ordinateur sur le réseau), il est incapable d'arrêter. Dans le fil avec les posté le modèle que j'ai utilisé, l'auteur mentionne quelque chose sur la définition d'un indicateur de bien arrêter le service.
Ce que quelqu'un sait ce qu'il veut dire par cela et comment le coder correctement arrêter le service?
J'ai ajouté mon code dans SvcStop() de la dernière ligne.
"l'auto.ReportServiceStatus(win32service.SERVICE_STOPPED)"
Dans mon cas, Ça fonctionne pour l'arrêt du service.