def execCmdWithoutKillTimeout(cmd, ifPrint=None, env=None): if not cmd: return print('Executing cmd without timeout : %s' % cmd) output = None error = None outputFile = None outputFilePath = "" try : strTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S") strUUID = commands.getoutput('uuidgen') outputFileName = "output%s.%s.log" % (strTime, strUUID) if not os.path.exists(ShellCmdExecutor.OPENSTACK_INSTALL_LOG_TEMP_DIR) : os.system("mkdir -p %s" % ShellCmdExecutor.OPENSTACK_INSTALL_LOG_TEMP_DIR) pass outputFilePath = "%s/%s" % (ShellCmdExecutor.OPENSTACK_INSTALL_LOG_TEMP_DIR, outputFileName) print("OutputFileName=%s" % outputFilePath) outputFile=open(outputFilePath, 'w') if env != None : try: import inspect import json stack = inspect.stack() the_class = stack[2][0].f_locals["self"].__class__.__name__ if not os.path.exists("/var/log/autoops_env.json"): record_env = {the_class: env} content = json.dumps(record_env, sort_keys=True, indent=4) else: content_data = json.load(file("/var/log/autoops_env.json")) content_data[the_class] = env content = json.dumps(content_data, sort_keys=True, indent=4) FileUtil.writeContent("/var/log/autoops_env.json", content) except Exception as ex: print("Save parsed Env params Failed") print(ex) env = dict(os.environ.items() + env.items()) pass p = subprocess.Popen(cmd, shell=True, close_fds=True, stdout=outputFile, stderr=subprocess.PIPE, env=env) output, error = p.communicate() output = FileUtil.readContent(outputFilePath) if ifPrint : print("cmd output=%s---" % output) elif not ifPrint or ifPrint == None : pass if error!=None and error!="" : print("cmd error=%s---" % error) pass if error!=None and error!="" and cmd.find(".sh") > -1: error = "SOE: " + str(error) except Exception, e : print(e)
# INSTALL_TAG_FILE = '/opt/msyqlha_installed' print 'start to install=======' #add HA mysql_ip_list_file_path = '/opt/mysql_ip_list' mysql_vip=JSONUtility.getValue('mysql_vip') haproxy_conf_file_path = '/etc/haproxy/haproxy.cfg' haproxy_conf = '/etc/haproxy' keepalived_conf_file_path = '/etc/keepalived/keepalived.conf' keepalived_conf = '/etc/keepalived' if not os.path.exists(mysql_ip_list_file_path): print 'mysql ip list not exist!' pass ShellCmdExecutor.execCmd('sudo chmod 777 %s' % mysql_ip_list_file_path) mysqlIPListContent = FileUtil.readContent(mysql_ip_list_file_path) mysqlIPListContent = mysqlIPListContent.strip() mysqlIPList = mysqlIPListContent.split(',') backendServerTemplate = 'server mysqldb-<INDEX> <SERVER_IP>:3309 weight 1' content = ''' listen mysql_cluster bind <MYSQL_VIP>:3306 mode tcp balance roundrobin <SERVER_LIST> ''' content = content.replace('<MYSQL_VIP>', mysql_vip) index = 1
def execCmdWithKillTimeout(cmd, ifPrint=None, kill_timeout=600, env=None): if not cmd: return output = None outputFile = None exitcode = -1 outputFilePath = "" content = "" try : if kill_timeout == None : kill_timeout = ShellCmdExecutor.DEFAULT_TIMEOUT pass strTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S") strUUID = commands.getoutput('uuidgen') outputFileName = "output%s.%s.log" % (strTime, strUUID) ###################################### cmd = cmd.strip() if cmd.startswith("bash") : scriptPath = cmd.strip().lstrip("bash").strip() content = FileUtil.readContent(scriptPath) #get script name content = content.strip() if content.startswith("bash") or content.startswith("sh") or content.startswith("python") or content.startswith("ruby"): strCmd = content.strip() elements = strCmd.split(" ") scriptName = elements[1].split("/")[-1] outputFileName = "%s-%s-%s.log" % (scriptName, strTime, strUUID) pass elif content.startswith("./"): pass pass ###################################### outputDir = "/var/log/autoopsscriptslog" if not os.path.exists(outputDir) : os.system("mkdir -p %s" % outputDir) pass outputFilePath = "%s/%s" % (outputDir, outputFileName) print("OutputFileName=%s" % outputFilePath) print(content) outputFile=open(outputFilePath, 'w') current_dir = os.path.dirname(__file__) print "current_dir=%s" % current_dir timeout3ScriptPath= "%s/timeout3.sh" % current_dir timeoutCmd = "bash %s -t %s -i 1 -d 1 %s" % (timeout3ScriptPath, kill_timeout, cmd) #print("you can check the cmd %s logs @ %s if the cmd execution time is long" % (cmd, outputFilePath)) if env != None : try: import inspect import json stack = inspect.stack() the_class = stack[2][0].f_locals["self"].__class__.__name__ if not os.path.exists("/var/log/autoops_env.json"): record_env = {the_class: env} content = json.dumps(record_env, sort_keys=True, indent=4) else: content_data = json.load(file("/var/log/autoops_env.json")) content_data[the_class] = env content = json.dumps(content_data, sort_keys=True, indent=4) FileUtil.writeContent("/var/log/autoops_env.json", content) except Exception as ex: print("Save parsed Env params Failed") print(ex) env = dict(os.environ.items() + env.items()) pass p = subprocess.Popen(timeoutCmd, shell=True, close_fds=True, stdout=outputFile, stderr=subprocess.STDOUT, env=env) #ToDo: start a thread to print the logs to log file output, error = p.communicate() exitcode = p.returncode output = FileUtil.readContent(outputFilePath) if ifPrint : print("cmd output=%s---" % output) print("The returncode is : %s" % exitcode) pass elif not ifPrint or ifPrint == None : pass except Exception, e : print(e)