Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
| Download
Views: 39598
1
# A very simple interface exposed from setup.py
2
3
import os, socket, sys
4
import time
5
6
def log(s):
7
sys.stderr.write('sage_server: %s\n'%s)
8
sys.stderr.flush()
9
10
def main(action='', daemon=True):
11
SMC = os.environ['SMC']
12
PATH = os.path.join(SMC, 'sage_server')
13
if not os.path.exists(PATH):
14
os.makedirs(PATH)
15
file = os.path.join(PATH, 'sage_server.')
16
17
pidfile = file + 'pid'
18
portfile = file + 'port'
19
logfile = file + 'log'
20
21
if action == '':
22
if len(sys.argv) <= 1:
23
action = ''
24
else:
25
action = sys.argv[1]
26
27
def start():
28
log("starting...")
29
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); s.bind(('',0)) # pick a free port
30
port = s.getsockname()[1]
31
del s
32
log("port=%s"%port)
33
open(portfile,'w').write(str(port))
34
open(logfile, 'w') # for now we clear it on restart...
35
log("setting logfile to %s"%logfile)
36
37
t0 = time.time()
38
import sage_server
39
log("seconds to import sage_server: %s"%(time.time() - t0))
40
run_server = lambda: sage_server.run_server(port=port, host='127.0.0.1', pidfile=pidfile, logfile=logfile)
41
if daemon:
42
log("daemonizing")
43
from daemon import daemonize
44
daemonize(pidfile)
45
run_server()
46
else:
47
log("starting in foreground")
48
run_server()
49
50
def stop():
51
log("stopping...")
52
if os.path.exists(pidfile):
53
try:
54
pid = int(open(pidfile).read())
55
sid = os.getsid(pid)
56
log("killing sid %s"%sid)
57
os.killpg(sid, 9)
58
log("successfully killed")
59
except Exception, e:
60
log("failed -- %s"%e)
61
log("removing '%s'"%pidfile)
62
os.unlink(pidfile)
63
else:
64
log("no pidfile")
65
def usage():
66
print "Usage: %s [start|stop|restart]"%sys.argv[0]
67
if action == 'start':
68
start()
69
elif action == 'stop':
70
stop()
71
elif action == 'restart':
72
try:
73
stop()
74
except:
75
pass
76
start()
77
else:
78
usage()
79
80