Path: blob/master/src/smc_sagews/smc_sagews/sage_server_command_line.py
Views: 286
# A very simple interface exposed from setup.py1from __future__ import absolute_import2import os, socket, sys3import time456def log(s):7sys.stderr.write('sage_server: %s\n' % s)8sys.stderr.flush()91011def main(action='', daemon=True):12SMC = os.environ['SMC']13PATH = os.path.join(SMC, 'sage_server')14if not os.path.exists(PATH):15os.makedirs(PATH)16file = os.path.join(PATH, 'sage_server.')1718pidfile = file + 'pid'19portfile = file + 'port'20logfile = file + 'log'2122if action == '':23if len(sys.argv) <= 1:24action = ''25else:26action = sys.argv[1]2728def start():29log("starting...")30s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)31s.bind(('', 0)) # pick a free port32port = s.getsockname()[1]33del s34log("port=%s" % port)35open(portfile, 'w').write(str(port))36open(logfile, 'w') # for now we clear it on restart...37log("setting logfile to %s" % logfile)3839t0 = time.time()40from . import sage_server41log("seconds to import sage_server: %s" % (time.time() - t0))42run_server = lambda: sage_server.run_server(port=port, host='127.0.0.1', pidfile=pidfile, logfile=logfile)43if daemon:44log("daemonizing")45from .daemon import daemonize46daemonize(pidfile)47run_server()48else:49log("starting in foreground")50run_server()5152def stop():53log("stopping...")54if os.path.exists(pidfile):55try:56pid = int(open(pidfile).read())57sid = os.getsid(pid)58log("killing sid %s" % sid)59os.killpg(sid, 9)60log("successfully killed")61except Exception as e:62log("failed -- %s" % e)63log("removing '%s'" % pidfile)64os.unlink(pidfile)65else:66log("no pidfile")6768def usage():69print(("Usage: %s [start|stop|restart]" % sys.argv[0]))7071if action == 'start':72start()73elif action == 'stop':74stop()75elif action == 'restart':76try:77stop()78except:79pass80start()81else:82usage()838485