Windows server создание демона как на Linux
Вопрос может быть очень странный, но мне нужно создать на виндовом компе процесс демон как на Linux. В Linux так же есть утилитка supervisor. Для винды аналога не нашёл, может кто то сталкивался и поможет)
Нужно для того, что бы развернуть Flask.
Ответы (1 шт):
Для начала нужно оформить код пакетом, если он из нескольких файлов, и уложить в site-packages.
myflask\
__init__.py
myapp.py
service.py
Установи pywin32. Рекомендую версию 225 (на конец 2020).
py -m pip install pywin32-225-cp38-cp38-win_amd64.whl
Добавить в PATH папки pywin32 (если устанавливать из экзешника - должен сам прописаться):
этот компьютер — свойства — дополнительные параметры системы — дополнительно — переменные среды.
Путь к питон\Lib\site-packages\pywin32_system32
Путь к питон\Lib\site-packages\win32
В myapp.py реализуй app. В service:
def start():
from myapp import app
app.run()
WINSERVICE = False
try:
if os.name == 'nt':
import win32serviceutil
import win32service
import servicemanager
WINSERVICE = True
except:
pass
if WINSERVICE:
class AppServerSvc(win32serviceutil.ServiceFramework):
_svc_name_ = "MyService"
_svc_display_name_ = "MyService"
def __init__(self, args):
import multiprocessing as mp
win32serviceutil.ServiceFramework.__init__(self, args)
self.proc = mp.Process(target=start)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
self.proc.terminate()
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, ''))
try:
self.proc.start()
self.proc.join()
except Exception as e:
import traceback
import sys
exc_type, exc_value, exc_traceback = sys.exc_info()
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
0xF000,
(self._svc_name_, "\n".join(traceback.format_tb(exc_traceback))))
def entry_point():
if WINSERVICE:
win32serviceutil.HandleCommandLine(AppServerSvc)
else:
start()
if __name__ == "__main__":
entry_point()
Теперь выполнить для установки службы:
py -m myflask.service install
Сервис появится в службах Windows. И для старта
py -m myflask.service start