def execself(delay): global isprimary restartscript = config.get('restart-script') if (not restartscript): rootlogger.error('no restart-script available!') return if (not isprimary): rootlogger.error('child process cannot fork again!') return rootlogger.warning('will re-exec self (delay %s)...', delay) newargs = list(originalargs) try: pos = newargs.index('--delay') except: pos = -1 if (delay): if (pos < 0): newargs.extend(['--delay', '5']) else: newargs[pos+1] = '5' else: if (pos < 0): newargs.extend(['--delay', '0']) else: newargs[pos+1] = '0' pid = os.fork() if (pid == 0): # child isprimary = False rootlogger.warning('...child forked, continuing') else: # parent try: os.execv(restartscript, newargs) except Exception, ex: rootlogger.error('Unable to exec %s: %s', restartscript, ex) rootlogger.error('parent should not still exist!')
argmap['bookkeeper'] = opts.bookkeeper if (opts.keepalive): argmap['keepalive'] = 'True' if (opts.keepaliveinterval): argmap['keepalive-interval'] = str(opts.keepaliveinterval) argmap['jabber-security'] = opts.jabbersecurity argmap['admin'] = opts.admin argmap['restart-script'] = opts.restartscript argmap['logfile'] = opts.logfile def argmap_restart_func(delay): execself(delay) argmap['restart-func-'] = argmap_restart_func config = volity.config.ConfigFile(opts.configfile, argmap) if (not (config.get('game') or config.get('bot'))): print sys.argv[0] + ': missing required option: --game GAMECLASS (or --bot BOTCLASS)' errors = True if (not config.get('jid')): print sys.argv[0] + ': missing required option: --jid JID' errors = True else: if (config.get('jid').find('@') < 0): print sys.argv[0] + ': JID must be a full <name@domain>' errors = True if (not config.get('password')): print sys.argv[0] + ': missing required option: --password PASSWORD' errors = True