#!/usr/bin/env python import sys, os, signal, subprocess, shlex, time def file_pid(name): proc1 = subprocess.Popen(shlex.split('ps aux'), stdout=subprocess.PIPE) proc2 = subprocess.Popen(shlex.split('grep ' + name), stdin=proc1.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE) proc3 = subprocess.Popen(shlex.split('awk \'{print $2}\' '), stdin=proc2.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE) proc1.stdout.close() proc2.stdout.close() out, err = proc3.communicate() lines = out.splitlines() pids = [] for line in lines: item = line.strip() pid = int(item) if pid > 0: pids.append(pid) if len(pids) > 0: return pids else: return [] def has_proc(name): pids = file_pid(name) return len(pids) > 0 def restart(item): name = item['file_name'] cmd = item['cmd'] tip = item['tip'] if name: cur_pid = os.getpid() pids = file_pid(name) print("restart " + name) for pid in pids: try: if cur_pid != pid: os.kill(pid, signal.SIGKILL) print('kill pid=' + str(pid)) else: continue except OSError as e: print("OSError no=" + str(e.errno) + " err=" + e.strerror) pass except BaseException as be: pass if cmd: print(cmd) time.sleep(1) os.system(cmd) if tip: print("tip:", tip) return def mac_sys(): plat_name = sys.platform return (plat_name == 'darwin') def main(): print("you can input: fcgi,queue,ugc,center,all to restart server or no input it will restart fcgi,queue") if len(sys.argv) == 2: option = sys.argv[1] else: option = '' cmds = [] if mac_sys(): if option == 'fcgi': cmds.append( {'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 1 -f "php fcgi_run.php"', 'tip': ''}) elif option == 'queue': cmds.append({'file_name': 'crontab.php', 'cmd': '', 'tip': ''}) elif option == 'ugc': cmds.append({'file_name': 'mac_ugcman', 'cmd': 'sudo ./mac_ugcman --log 6', 'tip': ''}) cmds.append({'file_name': 'ugc_srv.php', 'cmd': 'php ugc_srv.php', 'tip': ""}) elif option == 'center': cmds.append({'file_name': 'centra_srv.php', 'cmd': 'php centra_srv.php', 'tip': ''}) elif option == 'room': cmds.append({'file_name': 'room_srv.php', 'cmd': 'php room_srv.php', 'tip': ''}) cmds.append({'file_name': 'mac_webacc', 'cmd': './mac_webacc', 'tip': ''}) elif option == 'factory': cmds.append({'file_name': 'room_factory.php', 'cmd': 'php room_factory.php', 'tip': ''}) elif option == 'master': cmds.append( {'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 1 -f "php fcgi_run.php"', 'tip': ''}) cmds.append({'file_name': 'crontab.php', 'cmd': '', 'tip': ''}) cmds.append({'file_name': 'mac_ugcman', 'cmd': './mac_ugcman --log 6', 'tip': ''}) cmds.append({'file_name': 'ugc_srv.php', 'cmd': 'php ugc_srv.php', 'tip': ''}) cmds.append({'file_name': 'centra_srv.php', 'cmd': 'php centra_srv.php', 'tip': ''}) cmds.append({'file_name': 'room_factory.php', 'cmd': 'php room_factory.php', 'tip': ''}) elif option == 'slave': cmds.append( {'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 1 -f "php fcgi_run.php"', 'tip': ''}) cmds.append({'file_name': 'mac_ugcman', 'cmd': './mac_ugcman --log 6', 'tip': ''}) cmds.append({'file_name': 'ugc_srv.php', 'cmd': 'php ugc_srv.php', 'tip': ''}) cmds.append({'file_name': 'centra_srv.php', 'cmd': 'php centra_srv.php', 'tip': ''}) cmds.append({'file_name': 'room_srv.php', 'cmd': 'php room_srv.php', 'tip': ''}) cmds.append({'file_name': 'mac_webacc', 'cmd': './mac_webacc --log 6', 'tip': ''}) elif option == 'all': cmds.append( {'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 1 -f "php fcgi_run.php"', 'tip': ''}) cmds.append({'file_name': 'crontab.php', 'cmd': '', 'tip': ''}) cmds.append({'file_name': 'mac_ugcman', 'cmd': './mac_ugcman --log 6', 'tip': ''}) cmds.append({'file_name': 'ugc_srv.php', 'cmd': 'php ugc_srv.php', 'tip': ''}) cmds.append({'file_name': 'centra_srv.php', 'cmd': 'php centra_srv.php', 'tip': ''}) cmds.append({'file_name': 'room_factory.php', 'cmd': 'php room_factory.php', 'tip': ''}) cmds.append({'file_name': 'room_srv.php', 'cmd': 'php room_srv.php', 'tip': ''}) cmds.append({'file_name': 'mac_webacc', 'cmd': './mac_webacc --log 6', 'tip': ''}) else: cmds.append( {'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 1 -f "php fcgi_run.php"', 'tip': ''}) cmds.append({'file_name': 'crontab.php', 'cmd': '', 'tip': ''}) else: if option == 'fcgi': cmds.append( {'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 10 -f "php fcgi_run.php"', 'tip': ''}) elif option == 'queue': cmds.append({'file_name': 'crontab.php', 'cmd': '', 'tip': ''}) elif option == 'ugc': cmds.append({'file_name': 'ugcman', 'cmd': './ugcman --log 6', 'tip': ''}) cmds.append({'file_name': 'ugc_srv.php', 'cmd': 'php ugc_srv.php', 'tip': ''}) elif option == 'center': cmds.append({'file_name': 'centra_srv.php', 'cmd': 'php centra_srv.php', 'tip': ''}) elif option == 'room': cmds.append({'file_name': 'room_srv.php', 'cmd': 'php room_srv.php', 'tip': ''}) cmds.append({'file_name': 'webacc', 'cmd': './webacc --log 6', 'tip': ''}) elif option == 'factory': cmds.append({'file_name': 'room_factory.php', 'cmd': 'php room_factory.php', 'tip': ''}) elif option == 'master': cmds.append( {'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 10 -f "php fcgi_run.php"', 'tip': ''}) cmds.append({'file_name': 'crontab.php', 'cmd': '', 'tip': ''}) cmds.append({'file_name': 'ugcman', 'cmd': './ugcman --log 6', 'tip': ''}) cmds.append({'file_name': 'ugc_srv.php', 'cmd': 'php ugc_srv.php', 'tip': ''}) cmds.append({'file_name': 'centra_srv.php', 'cmd': 'php centra_srv.php', 'tip': ''}) cmds.append({'file_name': 'room_factory.php', 'cmd': 'php room_factory.php', 'tip': ''}) elif option == 'slave': cmds.append( {'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 10 -f "php fcgi_run.php"', 'tip': ''}) cmds.append({'file_name': 'ugcman', 'cmd': './ugcman --log 6', 'tip': ''}) cmds.append({'file_name': 'ugc_srv.php', 'cmd': 'php ugc_srv.php', 'tip': ''}) cmds.append({'file_name': 'centra_srv.php', 'cmd': 'php centra_srv.php', 'tip': ''}) cmds.append({'file_name': 'room_srv.php', 'cmd': 'php room_srv.php', 'tip': ''}) cmds.append({'file_name': 'webacc', 'cmd': './webacc --log 6', 'tip': ''}) elif option == 'all': cmds.append( {'file_name': 'fcgi_run.php', 'cmd': 'spawn-fcgi -a 127.0.0.1 -p 9100 -F 10 -f "php fcgi_run.php"', 'tip': ''}) cmds.append({'file_name': 'crontab.php', 'cmd': '', 'tip': ''}) cmds.append({'file_name': 'ugcman', 'cmd': './ugcman --log 6', 'tip': ''}) cmds.append({'file_name': 'ugc_srv.php', 'cmd': 'php ugc_srv.php', 'tip': ''}) cmds.append({'file_name': 'centra_srv.php', 'cmd': 'php centra_srv.php', 'tip': ''}) cmds.append({'file_name': 'room_factory.php', 'cmd': 'php room_factory.php', 'tip': ''}) cmds.append({'file_name': 'room_srv.php', 'cmd': 'php room_srv.php', 'tip': ''}) cmds.append({'file_name': 'webacc', 'cmd': './webacc --log 6', 'tip': ''}) else: print( "you must input some tag: fcgi,queue,ugc,center,room,factory,master,slave,all to restart server or no input it will restart fcgi,queue") for item in cmds: restart(item) sys.exit(2) if __name__ == '__main__': main()