#!/usr/bin/python #coding utf8 import os import sys import time def getRuningProgramPids(progname): pids = [] lines = os.popen('ps -ef | grep %s' % progname).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' % progname: 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, node_id, progname): pids = getRuningProgramPids(progname) for pid in pids: exepath = getExePath(pid) cmdline = getExeCmdLine(pid) if cmdline == ("./%s\0-i\0%d\0-n\0%d\0" % (progname, instance_id, node_id)): os.popen('kill -9 %d' % int(pid)) def listServer(progname): pids = getRuningProgramPids(progname) for pid in pids: exepath = getExePath(pid) cmdline = getExeCmdLine(pid) print(pid, exepath, cmdline) def restartServer(str_instance_ids, str_node_id, progname): instance_ids = str_instance_ids.split(',') node_id = int(str_node_id) for instance_id in instance_ids: instance_id = int(instance_id) stop(instance_id, node_id, progname) time.sleep(0.5) print('%s %d %d starting......' % (progname, instance_id, node_id)) cmd = 'sh start_instance.sh %d %d' % (instance_id, node_id) os.popen(cmd) time.sleep(0.5) def printHelp(): print('usuage: [restart stop list]') def main(argv): if len(argv) == 1: printHelp() else: if argv[1] == 'restart': restartServer(argv[2], argv[3], argv[4]) elif argv[1] == 'stop': stop(argv[2], argv[3], argv[4]) elif argv[1] == 'list': listServer(argv[2]) if __name__ == '__main__': main(sys.argv)