71 lines
1.9 KiB
Python
Executable File
71 lines
1.9 KiB
Python
Executable File
#!/usr/bin/python
|
|
#coding utf8
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
|
|
def getRuningProgramPids(jar_name):
|
|
pids = []
|
|
lines = os.popen('ps -ef |grep java|grep %s' % jar_name).readlines()
|
|
for l in lines:
|
|
line = ''
|
|
oldc = ''
|
|
for c in l.strip():
|
|
if c in [' ', '\t'] and c == oldc:
|
|
continue
|
|
oldc = c
|
|
line += c
|
|
line = line.split(' ')
|
|
|
|
if line[7] == './%s' % jar_name:
|
|
pids.append(line[1])
|
|
return pids
|
|
|
|
def getExePath(pid):
|
|
return os.popen('ls -l /proc/%d | grep "exe ->" | cut -d " " -f 7-' % int(pid)).read()
|
|
|
|
def getExeCmdLine(pid):
|
|
return os.popen('cat /proc/%d/cmdline' % int(pid)).read()
|
|
|
|
def stop(instance_id, jar_name):
|
|
pids = getRuningProgramPids(jar_name)
|
|
for pid in pids:
|
|
exepath = getExePath(pid)
|
|
cmdline = getExeCmdLine(pid)
|
|
if cmdline.find('-Dinstance_id=%d ' % instance_id) != -1:
|
|
os.popen('kill -9 %d' % int(pid))
|
|
|
|
def listServer(jar_name):
|
|
pids = getRuningProgramPids(jar_name)
|
|
for pid in pids:
|
|
exepath = getExePath(pid)
|
|
cmdline = getExeCmdLine(pid)
|
|
print(pid, exepath, cmdline)
|
|
|
|
def restartServer(str_instance_ids, jar_name):
|
|
instance_ids = str_instance_ids.split(',')
|
|
for instance_id in instance_ids:
|
|
instance_id = int(instance_id)
|
|
stop(instance_id, jar_name)
|
|
time.sleep(0.5)
|
|
print('%s %d starting......' % (jar_name, instance_id))
|
|
cmd = 'sh start_instance.sh %d' % (instance_id)
|
|
os.popen(cmd)
|
|
time.sleep(0.5)
|
|
|
|
def printHelp():
|
|
print('usuage: [restart list]')
|
|
|
|
def main(argv):
|
|
if len(argv) == 1:
|
|
printHelp()
|
|
else:
|
|
if argv[1] == 'restart':
|
|
restartServer(argv[2], argv[3])
|
|
elif argv[1] == 'list':
|
|
listServer(argv[2])
|
|
|
|
if __name__ == '__main__':
|
|
main(sys.argv)
|