mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-24 03:29:28 +01:00
launcher: daemonize and write PID file only after reading control options (-s/-R/-r)
(cherry picked from commit b9a66244f0
)
This commit is contained in:
parent
9d21a5269f
commit
7dec2d15db
69
launcher.py
69
launcher.py
@ -23,37 +23,6 @@ def _main():
|
|||||||
from pylinkirc.log import log
|
from pylinkirc.log import log
|
||||||
from pylinkirc import classes, utils, coremods, selectdriver
|
from pylinkirc import classes, utils, coremods, selectdriver
|
||||||
|
|
||||||
world.daemon = args.daemonize
|
|
||||||
if args.daemonize:
|
|
||||||
if args.no_pid:
|
|
||||||
print('ERROR: Combining --no-pid and --daemonize is not supported.')
|
|
||||||
sys.exit(1)
|
|
||||||
elif os.name != 'posix':
|
|
||||||
print('ERROR: Daemonization is not supported outside POSIX systems.')
|
|
||||||
sys.exit(1)
|
|
||||||
else:
|
|
||||||
log.info('Forking into the background.')
|
|
||||||
log.removeHandler(world.console_handler)
|
|
||||||
|
|
||||||
# Adapted from https://stackoverflow.com/questions/5975124/
|
|
||||||
if os.fork():
|
|
||||||
# Fork and exit the parent process.
|
|
||||||
os._exit(0)
|
|
||||||
|
|
||||||
os.setsid() # Decouple from our lovely terminal
|
|
||||||
if os.fork():
|
|
||||||
# Fork again to prevent starting zombie apocalypses.
|
|
||||||
os._exit(0)
|
|
||||||
else:
|
|
||||||
# For foreground sessions, set the terminal window title.
|
|
||||||
# See https://bbs.archlinux.org/viewtopic.php?id=85567 &
|
|
||||||
# https://stackoverflow.com/questions/7387276/
|
|
||||||
if os.name == 'nt':
|
|
||||||
import ctypes
|
|
||||||
ctypes.windll.kernel32.SetConsoleTitleW("PyLink %s" % __version__)
|
|
||||||
elif os.name == 'posix':
|
|
||||||
sys.stdout.write("\x1b]2;PyLink %s\x07" % __version__)
|
|
||||||
|
|
||||||
# Write and check for an existing PID file unless specifically told not to.
|
# Write and check for an existing PID file unless specifically told not to.
|
||||||
if not args.no_pid:
|
if not args.no_pid:
|
||||||
pidfile = '%s.pid' % conf.confname
|
pidfile = '%s.pid' % conf.confname
|
||||||
@ -103,6 +72,7 @@ def _main():
|
|||||||
log.error("Alternatively, you can install psutil for Python 3 (pip3 install psutil), "
|
log.error("Alternatively, you can install psutil for Python 3 (pip3 install psutil), "
|
||||||
"which will allow this launcher to detect stale PID files and ignore them.")
|
"which will allow this launcher to detect stale PID files and ignore them.")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
elif args.stop or args.restart or args.rehash: # XXX: also repetitive
|
elif args.stop or args.restart or args.rehash: # XXX: also repetitive
|
||||||
# --stop and --restart should take care of stale PIDs.
|
# --stop and --restart should take care of stale PIDs.
|
||||||
if pid:
|
if pid:
|
||||||
@ -112,12 +82,45 @@ def _main():
|
|||||||
log.error('Cannot stop/rehash PyLink: PID file %r does not exist.', pidfile)
|
log.error('Cannot stop/rehash PyLink: PID file %r does not exist.', pidfile)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
with open(pidfile, 'w') as f:
|
|
||||||
f.write(str(os.getpid()))
|
|
||||||
world._should_remove_pid = True
|
world._should_remove_pid = True
|
||||||
|
|
||||||
log.info('PyLink %s starting...', __version__)
|
log.info('PyLink %s starting...', __version__)
|
||||||
|
|
||||||
|
world.daemon = args.daemonize
|
||||||
|
if args.daemonize:
|
||||||
|
if args.no_pid:
|
||||||
|
print('ERROR: Combining --no-pid and --daemonize is not supported.')
|
||||||
|
sys.exit(1)
|
||||||
|
elif os.name != 'posix':
|
||||||
|
print('ERROR: Daemonization is not supported outside POSIX systems.')
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
log.info('Forking into the background.')
|
||||||
|
log.removeHandler(world.console_handler)
|
||||||
|
|
||||||
|
# Adapted from https://stackoverflow.com/questions/5975124/
|
||||||
|
if os.fork():
|
||||||
|
# Fork and exit the parent process.
|
||||||
|
os._exit(0)
|
||||||
|
|
||||||
|
os.setsid() # Decouple from our lovely terminal
|
||||||
|
if os.fork():
|
||||||
|
# Fork again to prevent starting zombie apocalypses.
|
||||||
|
os._exit(0)
|
||||||
|
else:
|
||||||
|
# For foreground sessions, set the terminal window title.
|
||||||
|
# See https://bbs.archlinux.org/viewtopic.php?id=85567 &
|
||||||
|
# https://stackoverflow.com/questions/7387276/
|
||||||
|
if os.name == 'nt':
|
||||||
|
import ctypes
|
||||||
|
ctypes.windll.kernel32.SetConsoleTitleW("PyLink %s" % __version__)
|
||||||
|
elif os.name == 'posix':
|
||||||
|
sys.stdout.write("\x1b]2;PyLink %s\x07" % __version__)
|
||||||
|
|
||||||
|
# Write the PID file only after forking.
|
||||||
|
with open(pidfile, 'w') as f:
|
||||||
|
f.write(str(os.getpid()))
|
||||||
|
|
||||||
# Load configured plugins
|
# Load configured plugins
|
||||||
to_load = conf.conf['plugins']
|
to_load = conf.conf['plugins']
|
||||||
utils._reset_module_dirs()
|
utils._reset_module_dirs()
|
||||||
|
Loading…
Reference in New Issue
Block a user