容器中实现拉取其它服务器的jar包程序
缘由:在做接口自动化测试时,若业务场景有一个前置仓库,在该仓库内完成一系列的场景测试,一旦某一场景测试失败,脏数据对环境造成影响则需要清理;
1、我容器的内核系统为Debian GNU/Linux 10,更换容器的下载源,换成阿里的镜像(原因:后面步骤会apt-get install tcl tk expect,在安装except会提示Unable to locate packet就是无法找到包嘛,那还不赶紧sudo apt-get update下!官网更新很慢,所以需要更新来更换,更换镜像也有区别,其实Ubuntu18.04版之前的任一版更改apt源为国内源方法早就有了,内容大同小异,我们应当掌握其规律了,其实每一版内容不同的地方就是版本号(或者官方一点的说:系统代号),所以我们先了解下新版本的系统代号,命令lsb_release -c,具体连接:https://blog.csdn.net/zhangjiahao14/article/details/80554616)
debian10更换阿里源:vim /etc/apt/sources.list (清空,或注释原来的配置,在配置中加入以下阿里源,保存退出)
deb https://mirrors.aliyun.com/debian stable main contrib non-free
deb https://mirrors.aliyun.com/debian stable-updates main contrib non-free
执行
apt-get clean
apt-get update
链接:https://blog.csdn.net/weixin_45784720/article/details/109040954
2、shell_agv.sh脚本如下
`#!/usr/bin/expect
set timeout 20s
spawn ssh root@172.31.236.15
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "zhang19941206\r" }
}
expect "#*"
send "pwd\r"
send "cd /opt/docker\r"
send "PYTHONIOENCODING=utf-8 python3 python_subprocess_agv.py\r"
expect eof
exit
`
在python3.7.1中执行直接python3 python_subprocess_agv.py,在python3.6.8中提示UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
我查看了编码也是utf-8,链接:https://blog.csdn.net/qq_18863573/article/details/102478506
3、python_subprocess_agv.py脚本
`
import subprocess
import time
def excuteCommand(com):
ex = subprocess.Popen(com, stdout=subprocess.PIPE, shell=True)
out, err = ex.communicate()
status = ex.wait()
print("cmd in:", com)
print("cmd out: ", out.decode())
return out.decode()
def excuteCommands(com):
sub = subprocess.Popen(com, stdout=subprocess.PIPE, shell=True)
while sub.poll() is None:
time.sleep(0.1)
return str(sub.returncode)
def test_one():
print("哈哈,开始执行")
two = time.time()
a = excuteCommands("/opt/docker/restart_agv.sh")
print("{} end ,please checking".format(a))
print("结束time: {}".format(time.time()-two))
print("yes/no")
test_one()
4、restart_agv.sh脚本:
cd /opt/docker
ls
docker-compose stop evo-rcs
pid=ps -ef|grep simu|grep -v grep|awk '{print $2}'
if [ -n "$pid" ]
then
kill -9 $pid
echo "shutdown simulation"
fi
echo "waiting 20s"
sleep 5s
echo "shell restart agv"
cd /opt/docker/sim/
sh simulationStart.sh
`
等jar包或服务都起来了之后,就可以执行接口访问等等了
ps:第一步可以采用高级版本,采用python中的paramiko模块来操作ssh后的操作,真的牛逼啊,直接上脚本
import paramiko
import time
def paramiko_interact(x):
trans = paramiko.Transport(('12345678', 22)) # 【坑1】 如果你使用 paramiko.SSHClient() cd后会回到连接的初始状态
trans.start_client()
# 用户名密码方式
trans.auth_password(username='root', password='11111')
# 打开一个通道
channel = trans.open_session()
channel.settimeout(300)
# 获取一个终端
channel.get_pty()
# 激活器
channel.invoke_shell()
cmd = 'cd /opt/docker\r'
# 发送要执行的命令
channel.send(cmd)
cmd = x # 【坑2】 如果你使用 sh ./study_shell.sh\r 可能会出现 [: 11: y: unexpected operator 错误
# 回显很长的命令可能执行较久,通过循环分批次取回回显
channel.send(cmd)
while True:
time.sleep(0.2)
rst = channel.recv(1024)
rst = rst.decode('utf-8')
print(rst)
# 通过命令执行提示符来判断命令是否执行完成
if 'yes/no' in rst:
#channel.send('yes\r') # 【坑3】 如果你使用绝对路径,则会在home路径建立文件夹导致与预期不符
#time.sleep(0.5)
# ret = channel.recv(1024)
# ret = ret.decode('utf-8')
# print(ret)
break
channel.close()
trans.close() # channel.invoke_shell()
if name == 'main':
#paramiko_interact(x='python3 python_subprocess_rcs.py\r')
paramiko_interact(x='python3 python_subprocess_rcs.py\r')
链接1:https://www.cnblogs.com/zhengna/p/10496746.html
链接2:https://blog.csdn.net/weiran2009/article/details/86719737
容器中实现拉取其它服务器的jar包程序的更多相关文章
- web工程中添加自建userLibary与将jar包放到lib文件夹下的区别
纯 java项目 使用的本地自己的JRE,那么classLoader在加载jar和class时候是分开的,对于我们自己编写的class,会在 APP_HOME/bin下.导入的jar包或者user l ...
- linux服务器部署jar包以及shell脚本的书写
背景:记录在linux环境下部署jar程序的过程 1 部署过程记录 1.1 程序结构 这里的main函数就在DemRest2.java 文件中. 为了部署方便,要做到以下两点: 1 在导出的jar包中 ...
- 关于spring boot在IDE工具中可以启动成功,但是打成jar包以及运行jar包失败的问题
1. 运行jar包报错,如下图: 2. 首先,找到pom.xml,把下面的build块中的内容改成如下所示: 3. 然后,请千万不要用Intellij idea来打包项目为Jar,你应该来到项目的根目 ...
- 在IDEA中使用gradle配置打可执行jar包[可执行jar与其所依赖的jar分离]
下面是我的项目的build.gradle文件的所有内容,注意高亮部分是关键: group 'com.xbs' version '1.0-SNAPSHOT' apply plugin: 'java' a ...
- Centos7服务器启动jar包项目最佳方式
jar后台运行:nohup java -jar xx.jar >/dev/null & 此处的“>/dev/null”作用是将终端输出信息输出到空洞中,即不保存输出信息,若要查看输 ...
- idea中的java web项目(添加jar包介绍)和java maven web项目目录结构
java web项目 web项目下web根目录名称是可以更改的 idea中新建java web项目,默认src为Sources Root,当然也可以手动改,在Sources Root下右键只能新建Pa ...
- Eclipse中如何添加相对路径的外部jar包
在eclipse中进行java编程的时候,常常需要引用外部jar包.而采用相对路径引用jar包可以大大方便java工程的拷贝,这样使得java工程从一个路径转移到另一个路径时不用大费周章的修改外包ja ...
- pom文件中引入依赖成功了,但是jar包找不着
编写代码的时候总是会碰到各种奇奇怪怪的问题,最近引入依赖的时候发现依赖虽然引入成功了,而且查看仓库,仓库中也存在该jar包,但是项目代码中并没有找到该jar包,重新导入reimport各种都试了还是不 ...
- Maven 手动安装JAR包到本地maven仓库后,但在项目中依旧报错找不到JAR包解决方法
本博客包含的内容: ①手动安装jar包到本地仓库: ②解决Missing artifact org.source.fastdfs:fastdfs:jar问题 .personSunflowerP { b ...
随机推荐
- 02 . 02 . Go之Gin+Vue开发一个线上外卖应用(集成第三方发送短信和xorm生成存储数据库表)
集成第三方发送短信 介绍 用户登录 用户登录有两种方式: 短信登录,密码登录 短信登录是使用手机号和验证码进行登录 短信平台 很多云平台,比如阿里云,腾讯云,七牛云等云厂商,向程序开发者提供了短信验证 ...
- 敲黑板:InnoDB的Double Write,你必须知道
世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. 前序 InnoDB引擎有几个重点特性,为其带来了更好的性能和可靠性: 插入缓冲(Insert Buffer) 两次写 ...
- 关于python递归函数,这样写就对了
大家好我是致力于让每个人都能够轻松学会编程的小梁,在这条路上任重道远,关注我,每天让您获取来自编程的乐趣. 关注公众号"轻松学编程".了解更多. 今天就给大家分享一下关于使用递归函 ...
- 安装jdk及安装多版本jdk
目录 由于要使用多个版本jdk,所以看下如何在一台电脑安装多个版本jdk 当然,如果你只需要安装一个jdk,本文也适合你,只需要在JAVA_HOME值填你jdk安装的目录即可 一.首先安装好不同的jd ...
- Zookeeper-3.5.8集群搭建
大数据技术有着众多系统需要分布式协调服务,比如Hadoop.Kafka系统,其中主从切换.维护命名空间.以及分布式协调通知等场景,需要保证数据的分布式一致性. Zookeeper是业界最著名的分布式协 ...
- R语言删除不规范的值(或NA)
在使用R语言处理表格时(xlsx, csv),有时里面含有缺失值,或者不规范的数值,比如下图有许多的问号"?",为了便于处理数据,这些都应该整行地删掉. 为了删掉那些包含" ...
- 1 Prism概述
架构目标 以模块化方式开发应用,这些模块被独立团队用WPF技术开发,集成,部署,这是使用Prism的最大好处. 最小化交叉团队依赖.允许团队在不同领域专业化,比如UI设计,商业逻辑实现,基础代码开发 ...
- IP 层收发报文简要剖析6--ip报文输出3 ip_push_pending_frames
L4层的协议会把数据通过ip_append_data或ip_append_page把数据线放在缓冲区,然后再显示调用ip_push_pending_frames传送数据. 把数据放在缓冲区有两个优点, ...
- 解决SSH显示中文乱码的问题(cent os7)
用SSH连接服务器显示中文乱码,试过修改SSH端,不成功.这次从服务器端下手 1.先查看服务器现有的字符集 [root@dm01 ~]# locale -a 在结果中找到 如果没有支持的字符集就需要安 ...
- JVM全方位解读(附面试题)
java中就虚拟机是其他语言编写的(C语言+汇编语言,因此,JVM最常出现的攻击就是buffer overflow),如javac命令等,而java api是java写的,大多开源在openjdk,j ...