Execute netstat and kill as the right user in runsics.py.
Also reduced feedback whent start, stopping and checking SICS status.
This commit is contained in:
@ -37,8 +37,8 @@ inst_test_sockoffset = {
|
|||||||
deflt_dir = '/usr/local/sics/server'
|
deflt_dir = '/usr/local/sics/server'
|
||||||
deflt_sockoffset = 'none'
|
deflt_sockoffset = 'none'
|
||||||
deflt_user = inst_user
|
deflt_user = inst_user
|
||||||
sics_killer = 'root'
|
sics_killer = inst_user
|
||||||
sics_checker = inst_user
|
sics_checker = 'root'
|
||||||
if os.environ.has_key('TEST_SICS'):
|
if os.environ.has_key('TEST_SICS'):
|
||||||
deflt_test = os.environ['TEST_SICS']
|
deflt_test = os.environ['TEST_SICS']
|
||||||
else:
|
else:
|
||||||
@ -50,7 +50,7 @@ def sics_preexec():
|
|||||||
|
|
||||||
# TODO Launch simulated devices if TEST_SICS=fakedev. Must write launch script first.
|
# TODO Launch simulated devices if TEST_SICS=fakedev. Must write launch script first.
|
||||||
def start_cmd(server, args):
|
def start_cmd(server, args):
|
||||||
if status_cmd(server, args):
|
if status_fn(server, args) != (0,0):
|
||||||
print '%s is already running. Cowardly refusing to launch it twice' % server
|
print '%s is already running. Cowardly refusing to launch it twice' % server
|
||||||
return
|
return
|
||||||
if (args.sockoffset != 'none'):
|
if (args.sockoffset != 'none'):
|
||||||
@ -80,64 +80,71 @@ def start_cmd(server, args):
|
|||||||
|
|
||||||
def stop_cmd(server, args):
|
def stop_cmd(server, args):
|
||||||
INTMSG = 'SICSINT 6'
|
INTMSG = 'SICSINT 6'
|
||||||
ret = status_cmd(server, args)
|
(serv_port, pid) = status_cmd(server, args)
|
||||||
if ret:
|
if pid:
|
||||||
(serv_port, pid) = ret
|
|
||||||
if (args.sockoffset == 'none'):
|
if (args.sockoffset == 'none'):
|
||||||
int_port = server_port[server]['interrupt']
|
int_port = server_port[server]['interrupt']
|
||||||
else:
|
else:
|
||||||
int_port = server_port[server]['interrupt'] + inst_test_sockoffset[args.sockoffset]
|
int_port = server_port[server]['interrupt'] + inst_test_sockoffset[args.sockoffset]
|
||||||
print 'STOP %s(%d) listening on %d' % (server, pid, serv_port)
|
print "STOP %s(%d) by sending '%s' to socket %d" % (server, pid, INTMSG, int_port)
|
||||||
print "Sending '%s' to %d" % (INTMSG, int_port)
|
|
||||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
sock.sendto( INTMSG + '\n\r', ('localhost', int_port) )
|
sock.sendto( INTMSG + '\n\r', ('localhost', int_port) )
|
||||||
sock.close()
|
sock.close()
|
||||||
if status_cmd(server, args):
|
if status_cmd(server, args) != (0,0):
|
||||||
|
sys.stdout.write('Waiting ')
|
||||||
for n in range(3):
|
for n in range(3):
|
||||||
print 'Waiting'
|
sys.stdout.write('.')
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
if status_cmd(server, args):
|
if status_fn(server, args) != (0,0):
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
print ''
|
print ''
|
||||||
if status_cmd(server, args):
|
else:
|
||||||
|
return
|
||||||
|
if status_fn(server, args) != (0,0):
|
||||||
print 'Failed to stop %s' % server
|
print 'Failed to stop %s' % server
|
||||||
print "Fragging PID %d with default KILL" % (pid)
|
print "Fragging PID %d with default KILL" % (pid)
|
||||||
subprocess.call(shlex.split('sudo -u %s /bin/kill %d' % (sics_killer, pid)))
|
subprocess.call(shlex.split('sudo -u %s /bin/kill %d' % (sics_killer, pid)))
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
if status_cmd(server, args):
|
if status_fn(server, args) != (0,0):
|
||||||
print 'Failed again!'
|
print 'Failed again!'
|
||||||
print "Terminating PID %d with EXTREME PREJUDICE (-15)" % (pid)
|
print "Terminating PID %d with EXTREME PREJUDICE (-15)" % (pid)
|
||||||
subprocess.call(shlex.split('sudo -u %s /bin/kill -15 %d' % sics_killer, (pid)))
|
subprocess.call(shlex.split('sudo -u %s /bin/kill -15 %d' % sics_killer, (pid)))
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
if status_cmd(server, args):
|
if status_cmd(server, args) != (0,0):
|
||||||
print 'Why wont you die, Powers!!??'
|
print 'Why wont you die, Powers!!??'
|
||||||
print 'I give up. Try calling a SICS programmer or sysadmin'
|
print 'I give up. Try calling a SICS programmer or sysadmin'
|
||||||
|
|
||||||
|
|
||||||
def status_cmd(server, args):
|
def status_fn(server, args):
|
||||||
if (args.sockoffset == 'none'):
|
if (args.sockoffset == 'none'):
|
||||||
sock = server_port[server]['server']
|
sock = server_port[server]['server']
|
||||||
else:
|
else:
|
||||||
sock = server_port[server]['server'] + inst_test_sockoffset[args.sockoffset]
|
sock = server_port[server]['server'] + inst_test_sockoffset[args.sockoffset]
|
||||||
status_cmd = 'sudo -u %s netstat -nltp' % sics_checker
|
status_str = 'sudo -u %s netstat -nltp' % sics_checker
|
||||||
netstat_str, err = subprocess.Popen(shlex.split(status_cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
|
netstat_str, err = subprocess.Popen(shlex.split(status_str), stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
|
||||||
# ffr: We can replace the previous Popen().communicate() line with the following two lines if Python is upgraded to V2.7
|
# ffr: We can replace the previous Popen().communicate() line with the following two lines if Python is upgraded to V2.7
|
||||||
# with open(os.devnull) as fp:
|
# with open(os.devnull) as fp:
|
||||||
# netstat_str = subprocess.check_output(shlex.split(status_cmd), stderr=fp)
|
# netstat_str = subprocess.check_output(shlex.split(status_str), stderr=fp)
|
||||||
#
|
#
|
||||||
#Find PID of SICServer listening on server port
|
#Find PID of SICServer listening on server port
|
||||||
m = re.search(':%d .* (\d+)\/SICServer' % sock, netstat_str)
|
m = re.search(':%d .* (\d+)\/SICServer' % sock, netstat_str)
|
||||||
if m:
|
if m:
|
||||||
pid = int(m.group(1))
|
pid = int(m.group(1))
|
||||||
print '%s listening on port %d, PID=%d' % (server, sock, pid)
|
|
||||||
return (sock, pid)
|
return (sock, pid)
|
||||||
|
else:
|
||||||
|
return (0,0)
|
||||||
|
|
||||||
|
def status_cmd(server, args):
|
||||||
|
(sock,pid) = status_fn(server, args)
|
||||||
|
if pid:
|
||||||
|
print '%s listening on port %d, PID=%d' % (server, sock, pid)
|
||||||
else:
|
else:
|
||||||
print '%s not running' % server
|
print '%s not running' % server
|
||||||
return ''
|
return (sock, pid)
|
||||||
|
|
||||||
def main(**kwargs):
|
def main(**kwargs):
|
||||||
global sics_killer, sics_checker
|
global sics_killer, sics_checker
|
||||||
|
Reference in New Issue
Block a user