【解决】用python启动tomcat服务脚本失败问题
【背景】
在测试敏捷开发项目时,迭代版本较频繁,每次手动重启tomcat服务较为繁琐,于是尝试编写python脚本,实现更换新包,重启tomcat服务功能。
【过程】
脚本编写完了执行时,发现远程启动Linux系统下tomcat无法启动,报错如图:
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
【解决】
百度后发现是tomcat/bin/setclasspath.sh 中需要制定JAVA HOME和JRE HOME,于是添加如下:
保存后,重新执行启动tomcat脚本,启动成功:
【附录脚本】
1 import paramiko 2 import sys 3 4 HOST = '192.168.1.137' 5 PORT = 22 6 USER = 'root' 7 PASSWD = '123456' 8 #web配置文件目录 9 DATABASE_DIR = r'D:\项目资料\abc3.0\tmp\web配置文件\datasource.xml' 10 RESOURCE_DIR = r'D:\项目资料\abc3.0\tmp\web配置文件\resources.properties' 11 #web配置文件目标目录 12 DATABASE_DEST_DIR = r'/usr/tomcat/apache-tomcat-8.5.30/webapps/web/WEB-INF/classes/datasource.xml' 13 RESOURCE_DEST_DIR = r'/usr/tomcat/apache-tomcat-8.5.30/webapps/web/WEB-INF/classes/resources.properties' 14 15 16 #创建SHHClient示例对象 17 ssh = paramiko.SSHClient() 18 19 #调用方法,表示没有存储远程机器的公钥,允许访问 20 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 21 22 #连接远程服务器 地址,端口,用户名密码 23 ssh.connect(HOST,PORT,USER,PASSWD) 24 25 26 def remoteRun(cmd, printOutput=True): 27 """执行远程操作命令""" 28 stdin, stdout, stderr = ssh.exec_command(cmd) 29 output = stdout.read().decode() 30 errinfo = stderr.read().decode() 31 if printOutput: 32 print(output + errinfo) 33 return output + errinfo 34 35 36 def replaceFile(dir1f1, dir2f1, dir1f2, dir2f2): 37 """替换配置文件""" 38 sftp = ssh.open_sftp() 39 print('开始替换database.xml...') 40 sftp.put(dir1f1, dir2f1) 41 print('开始替换resources.properties...') 42 sftp.put(dir1f2, dir2f2) 43 sftp.close() 44 print('替换完毕!!!') 45 46 47 print("检查tomcat是否有运行......") 48 output = remoteRun("ps -ef|grep tomcat|grep -v grep") 49 50 #如果存在,则杀死进程 51 if ("/usr/tomcat/apache-tomcat-8.5.30/bin/bootstrap.jar") in output: 52 print("tomcat服务运行中,停止服务......") 53 parts = output.split(' ') 54 parts = [part for part in parts if part] 55 pid = parts[1] 56 #杀死进程 57 output = remoteRun(f'kill -9 {pid}') 58 59 #再次检查是否有先前版本运行 60 output = remoteRun("ps -ef|grep tomcat|grep -v grep") 61 if ("/usr/tomcat/apache-tomcat-8.5.30/bin/bootstrap.jar") in output: 62 print("服务未能停止运行!!!") 63 #退出进程 64 sys.exit(3) 65 else: 66 print("服务停止成功") 67 else: 68 print("没有") 69 70 71 #替换配置文件 72 #replaceFile(DATABASE_DIR, DATABASE_DEST_DIR, RESOURCE_DIR, RESOURCE_DEST_DIR) 73 74 75 #printOutput=True 打印输出 76 print("启动tomcat") 77 remoteRun("cd /usr/tomcat/apache-tomcat-8.5.30/bin;sh startup.sh;sleep 5",printOutput=True) 78 79 print("检查tomcat是否运行成功") 80 output = remoteRun('ps -ef|grep tomcat|grep -v grep') 81 82 #如果存在,运行成功 83 if ("/usr/tomcat/apache-tomcat-8.5.30/bin/bootstrap.jar") in output: 84 print("tomcat服务运行成功") 85 else: 86 print('服务没有运行成功!') 87 sys.exit(3)
posted on 2018-09-26 10:36 UnknownTarget 阅读(1077) 评论(0) 编辑 收藏 举报