mirror of
https://github.com/SickGear/SickGear.git
synced 2024-12-03 01:43:37 +00:00
Fix for restart and PID issues.
This commit is contained in:
parent
6558b8ac71
commit
42b621103f
2 changed files with 32 additions and 16 deletions
41
SickBeard.py
41
SickBeard.py
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/env python2
|
# !/usr/bin/env python2
|
||||||
# Author: Nic Wolfe <nic@wolfeden.ca>
|
# Author: Nic Wolfe <nic@wolfeden.ca>
|
||||||
# URL: http://code.google.com/p/sickbeard/
|
# URL: http://code.google.com/p/sickbeard/
|
||||||
#
|
#
|
||||||
|
@ -19,12 +19,14 @@
|
||||||
|
|
||||||
# Check needed software dependencies to nudge users to fix their setup
|
# Check needed software dependencies to nudge users to fix their setup
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
if sys.version_info < (2, 6):
|
if sys.version_info < (2, 6):
|
||||||
print "Sorry, requires Python 2.6 or 2.7."
|
print "Sorry, requires Python 2.6 or 2.7."
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import Cheetah
|
import Cheetah
|
||||||
|
|
||||||
if Cheetah.Version[0] != '2':
|
if Cheetah.Version[0] != '2':
|
||||||
raise ValueError
|
raise ValueError
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
@ -35,11 +37,12 @@ except:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), 'lib')))
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), 'lib')))
|
||||||
|
|
||||||
# We only need this for compiling an EXE and I will just always do that on 2.6+
|
# We only need this for compiling an EXE and I will just always do that on 2.6+
|
||||||
if sys.hexversion >= 0x020600F0:
|
if sys.hexversion >= 0x020600F0:
|
||||||
from multiprocessing import freeze_support # @UnresolvedImport
|
from multiprocessing import freeze_support # @UnresolvedImport
|
||||||
|
|
||||||
import locale
|
import locale
|
||||||
import datetime
|
import datetime
|
||||||
|
@ -65,7 +68,8 @@ from lib.configobj import ConfigObj
|
||||||
signal.signal(signal.SIGINT, sickbeard.sig_handler)
|
signal.signal(signal.SIGINT, sickbeard.sig_handler)
|
||||||
signal.signal(signal.SIGTERM, sickbeard.sig_handler)
|
signal.signal(signal.SIGTERM, sickbeard.sig_handler)
|
||||||
|
|
||||||
throwaway = datetime.datetime.strptime('20110101','%Y%m%d')
|
throwaway = datetime.datetime.strptime('20110101', '%Y%m%d')
|
||||||
|
|
||||||
|
|
||||||
def loadShowsFromDB():
|
def loadShowsFromDB():
|
||||||
"""
|
"""
|
||||||
|
@ -80,10 +84,12 @@ def loadShowsFromDB():
|
||||||
curShow = TVShow(int(sqlShow["indexer"]), int(sqlShow["indexer_id"]))
|
curShow = TVShow(int(sqlShow["indexer"]), int(sqlShow["indexer_id"]))
|
||||||
sickbeard.showList.append(curShow)
|
sickbeard.showList.append(curShow)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
logger.log(u"There was an error creating the show in " + sqlShow["location"] + ": " + str(e).decode('utf-8'), logger.ERROR)
|
logger.log(
|
||||||
|
u"There was an error creating the show in " + sqlShow["location"] + ": " + str(e).decode('utf-8'),
|
||||||
|
logger.ERROR)
|
||||||
logger.log(traceback.format_exc(), logger.DEBUG)
|
logger.log(traceback.format_exc(), logger.DEBUG)
|
||||||
|
|
||||||
# TODO: update the existing shows if the showlist has something in it
|
# TODO: update the existing shows if the showlist has something in it
|
||||||
|
|
||||||
|
|
||||||
def daemonize():
|
def daemonize():
|
||||||
|
@ -101,7 +107,7 @@ def daemonize():
|
||||||
sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
|
sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
os.setsid() # @UndefinedVariable - only available in UNIX
|
os.setsid(pid) # @UndefinedVariable - only available in UNIX
|
||||||
|
|
||||||
# Make sure I can read my own files and shut out others
|
# Make sure I can read my own files and shut out others
|
||||||
prev = os.umask(0)
|
prev = os.umask(0)
|
||||||
|
@ -139,6 +145,7 @@ def daemonize():
|
||||||
os.dup2(stdout.fileno(), sys.stdout.fileno())
|
os.dup2(stdout.fileno(), sys.stdout.fileno())
|
||||||
os.dup2(stderr.fileno(), sys.stderr.fileno())
|
os.dup2(stderr.fileno(), sys.stderr.fileno())
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""
|
"""
|
||||||
TV for me
|
TV for me
|
||||||
|
@ -194,7 +201,9 @@ def main():
|
||||||
threading.currentThread().name = "MAIN"
|
threading.currentThread().name = "MAIN"
|
||||||
|
|
||||||
try:
|
try:
|
||||||
opts, args = getopt.getopt(sys.argv[1:], "qfdp::", ['quiet', 'forceupdate', 'daemon', 'port=', 'pidfile=', 'nolaunch', 'config=', 'datadir=']) # @UnusedVariable
|
opts, args = getopt.getopt(sys.argv[1:], "qfdp::",
|
||||||
|
['quiet', 'forceupdate', 'daemon', 'port=', 'pidfile=', 'nolaunch', 'config=',
|
||||||
|
'datadir=']) # @UnusedVariable
|
||||||
except getopt.GetoptError:
|
except getopt.GetoptError:
|
||||||
print "Available Options: --quiet, --forceupdate, --port, --daemon, --pidfile, --config, --datadir"
|
print "Available Options: --quiet, --forceupdate, --port, --daemon, --pidfile, --config, --datadir"
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
@ -300,13 +309,17 @@ def main():
|
||||||
CUR_DB_VERSION = db.DBConnection().checkDBVersion()
|
CUR_DB_VERSION = db.DBConnection().checkDBVersion()
|
||||||
if CUR_DB_VERSION > 0:
|
if CUR_DB_VERSION > 0:
|
||||||
if CUR_DB_VERSION < MIN_DB_VERSION:
|
if CUR_DB_VERSION < MIN_DB_VERSION:
|
||||||
raise SystemExit("Your database version (" + str(db.DBConnection().checkDBVersion()) + ") is too old to migrate from with this version of SickRage (" + str(MIN_DB_VERSION) + ").\n" + \
|
raise SystemExit("Your database version (" + str(
|
||||||
|
db.DBConnection().checkDBVersion()) + ") is too old to migrate from with this version of SickRage (" + str(
|
||||||
|
MIN_DB_VERSION) + ").\n" + \
|
||||||
"Upgrade using a previous version of SB first, or start with no database file to begin fresh.")
|
"Upgrade using a previous version of SB first, or start with no database file to begin fresh.")
|
||||||
if CUR_DB_VERSION > MAX_DB_VERSION:
|
if CUR_DB_VERSION > MAX_DB_VERSION:
|
||||||
raise SystemExit("Your database version (" + str(db.DBConnection().checkDBVersion()) + ") has been incremented past what this version of SickRage supports (" + str(MAX_DB_VERSION) + ").\n" + \
|
raise SystemExit("Your database version (" + str(
|
||||||
|
db.DBConnection().checkDBVersion()) + ") has been incremented past what this version of SickRage supports (" + str(
|
||||||
|
MAX_DB_VERSION) + ").\n" + \
|
||||||
"If you have used other forks of SB, your database may be unusable due to their modifications.")
|
"If you have used other forks of SB, your database may be unusable due to their modifications.")
|
||||||
|
|
||||||
# Initialize the config and our threads
|
# Initialize the config and our threads
|
||||||
sickbeard.initialize(consoleLogging=consoleLogging)
|
sickbeard.initialize(consoleLogging=consoleLogging)
|
||||||
|
|
||||||
sickbeard.showList = []
|
sickbeard.showList = []
|
||||||
|
@ -342,16 +355,16 @@ def main():
|
||||||
initWebServer({
|
initWebServer({
|
||||||
'port': startPort,
|
'port': startPort,
|
||||||
'host': webhost,
|
'host': webhost,
|
||||||
'data_root': os.path.join(sickbeard.PROG_DIR, 'gui/'+sickbeard.GUI_NAME),
|
'data_root': os.path.join(sickbeard.PROG_DIR, 'gui/' + sickbeard.GUI_NAME),
|
||||||
'web_root': sickbeard.WEB_ROOT,
|
'web_root': sickbeard.WEB_ROOT,
|
||||||
'log_dir': log_dir,
|
'log_dir': log_dir,
|
||||||
'username': sickbeard.WEB_USERNAME,
|
'username': sickbeard.WEB_USERNAME,
|
||||||
'password': sickbeard.WEB_PASSWORD,
|
'password': sickbeard.WEB_PASSWORD,
|
||||||
'enable_https': sickbeard.ENABLE_HTTPS,
|
'enable_https': sickbeard.ENABLE_HTTPS,
|
||||||
'handle_reverse_proxy': sickbeard.HANDLE_REVERSE_PROXY,
|
'handle_reverse_proxy': sickbeard.HANDLE_REVERSE_PROXY,
|
||||||
'https_cert': sickbeard.HTTPS_CERT,
|
'https_cert': sickbeard.HTTPS_CERT,
|
||||||
'https_key': sickbeard.HTTPS_KEY,
|
'https_key': sickbeard.HTTPS_KEY,
|
||||||
})
|
})
|
||||||
except IOError:
|
except IOError:
|
||||||
logger.log(u"Unable to start web server, is something else running on port %d?" % startPort, logger.ERROR)
|
logger.log(u"Unable to start web server, is something else running on port %d?" % startPort, logger.ERROR)
|
||||||
if sickbeard.LAUNCH_BROWSER and not sickbeard.DAEMON:
|
if sickbeard.LAUNCH_BROWSER and not sickbeard.DAEMON:
|
||||||
|
@ -372,7 +385,7 @@ def main():
|
||||||
|
|
||||||
# Start an update if we're supposed to
|
# Start an update if we're supposed to
|
||||||
if forceUpdate or sickbeard.UPDATE_SHOWS_ON_START:
|
if forceUpdate or sickbeard.UPDATE_SHOWS_ON_START:
|
||||||
sickbeard.showUpdateScheduler.action.run(force=True) # @UndefinedVariable
|
sickbeard.showUpdateScheduler.action.run(force=True) # @UndefinedVariable
|
||||||
|
|
||||||
# Stay alive while my threads do the work
|
# Stay alive while my threads do the work
|
||||||
while (True):
|
while (True):
|
||||||
|
|
|
@ -1303,6 +1303,7 @@ def saveAndShutdown(restart=False):
|
||||||
logger.log(u"Removing pidfile " + str(PIDFILE))
|
logger.log(u"Removing pidfile " + str(PIDFILE))
|
||||||
remove_pid_file(PIDFILE)
|
remove_pid_file(PIDFILE)
|
||||||
|
|
||||||
|
status = 0
|
||||||
if restart:
|
if restart:
|
||||||
install_type = versionCheckScheduler.action.install_type
|
install_type = versionCheckScheduler.action.install_type
|
||||||
|
|
||||||
|
@ -1325,9 +1326,11 @@ def saveAndShutdown(restart=False):
|
||||||
popen_list += ['--nolaunch']
|
popen_list += ['--nolaunch']
|
||||||
logger.log(u"Restarting SickRage with " + str(popen_list))
|
logger.log(u"Restarting SickRage with " + str(popen_list))
|
||||||
logger.close()
|
logger.close()
|
||||||
subprocess.Popen(popen_list, cwd=os.getcwd())
|
p = subprocess.Popen(popen_list, cwd=os.getcwd())
|
||||||
|
p.wait()
|
||||||
|
status = p.returncode
|
||||||
|
|
||||||
os._exit(0)
|
os._exit(status)
|
||||||
|
|
||||||
|
|
||||||
def invoke_command(to_call, *args, **kwargs):
|
def invoke_command(to_call, *args, **kwargs):
|
||||||
|
|
Loading…
Reference in a new issue