fix windows restart

This commit is contained in:
j 2016-02-01 13:15:34 +05:30
parent d0c19737f9
commit d32e1527a8
3 changed files with 64 additions and 10 deletions

View File

@ -2,11 +2,12 @@
# vi:si:et:sw=4:sts=4:ts=4 # vi:si:et:sw=4:sts=4:ts=4
import subprocess
from os.path import join, exists, dirname from os.path import join, exists, dirname
import os import os
import sys
import shutil import shutil
import signal
import subprocess
import sys
import settings import settings
from utils import run, get from utils import run, get
@ -55,7 +56,35 @@ def command_stop(*args):
""" """
Stop Open Media Libary Stop Open Media Libary
""" """
pass if sys.platform == 'win32':
from utils import check_pid
if args:
pid = args[0]
else:
pid = os.path.join(settings.data_path, 'openmedialibrary.pid')
try:
with open(pid) as fd:
pid = int(fd.read())
except:
return
if check_pid(pid):
os.kill(pid, signal.SIGTERM)
def command_restart(*args):
"""
Restart Open Media Libary
"""
if sys.platform == 'win32':
from utils import check_pid, ctl
pidfile = os.path.join(settings.data_path, 'openmedialibrary.pid')
try:
with open(pidfile) as fd:
pid = int(fd.read())
except:
pid = None
if pid and check_pid(pid):
os.kill(pid, signal.SIGTERM)
ctl('server', pidfile)
def command_install_launcher(*args): def command_install_launcher(*args):
""" """

View File

@ -19,8 +19,8 @@ import OpenSSL.crypto
import ox import ox
from oxtornado import actions from oxtornado import actions
import state
import settings import settings
import utils
import db import db
import logging import logging
@ -206,12 +206,7 @@ def update_available():
def restart_oml(update=False): def restart_oml(update=False):
if update: if update:
get_latest_release() get_latest_release()
if sys.platform == 'win32': utils.ctl('restart')
subprocess.Popen([os.path.join(settings.base_dir, 'ctl.bat'), 'restart'],
start_new_session=True)
else:
subprocess.Popen([os.path.join(settings.base_dir, 'ctl'), 'restart'],
close_fds=True, start_new_session=True)
def get_app_version(app): def get_app_version(app):
plist = app + '/Contents/Info.plist' plist = app + '/Contents/Info.plist'

View File

@ -433,3 +433,33 @@ def update_static():
for file in files for file in files
]) ])
) )
def check_pid(pid):
try:
os.kill(pid, 0)
except:
return False
else:
return True
def check_pidfile(pid):
try:
with open(pid) as fd:
pid = int(fd.read())
except:
return False
return check_pid(pid)
def ctl(*args):
if sys.platform == 'win32':
import settings
platform_win32 = os.path.normpath(os.path.join(settings.base_dir, '..', 'platform_win32'))
python = os.path.join(platform_win32, 'pythonw.exe')
cmd = [python, 'oml'] + list(args)
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
subprocess.Popen(cmd, cwd=settings.base_dir, start_new_session=True, startupinfo=startupinfo)
else:
subprocess.Popen([os.path.join(settings.base_dir, 'ctl')] + list(args),
close_fds=True, start_new_session=True)