缘由:在做接口自动化测试时,若业务场景有一个前置仓库,在该仓库内完成一系列的场景测试,一旦某一场景测试失败,脏数据对环境造成影响则需要清理;

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包程序的更多相关文章

  1. web工程中添加自建userLibary与将jar包放到lib文件夹下的区别

    纯 java项目 使用的本地自己的JRE,那么classLoader在加载jar和class时候是分开的,对于我们自己编写的class,会在 APP_HOME/bin下.导入的jar包或者user l ...

  2. linux服务器部署jar包以及shell脚本的书写

    背景:记录在linux环境下部署jar程序的过程 1 部署过程记录 1.1 程序结构 这里的main函数就在DemRest2.java 文件中. 为了部署方便,要做到以下两点: 1 在导出的jar包中 ...

  3. 关于spring boot在IDE工具中可以启动成功,但是打成jar包以及运行jar包失败的问题

    1. 运行jar包报错,如下图: 2. 首先,找到pom.xml,把下面的build块中的内容改成如下所示: 3. 然后,请千万不要用Intellij idea来打包项目为Jar,你应该来到项目的根目 ...

  4. 在IDEA中使用gradle配置打可执行jar包[可执行jar与其所依赖的jar分离]

    下面是我的项目的build.gradle文件的所有内容,注意高亮部分是关键: group 'com.xbs' version '1.0-SNAPSHOT' apply plugin: 'java' a ...

  5. Centos7服务器启动jar包项目最佳方式

    jar后台运行:nohup java -jar xx.jar >/dev/null & 此处的“>/dev/null”作用是将终端输出信息输出到空洞中,即不保存输出信息,若要查看输 ...

  6. idea中的java web项目(添加jar包介绍)和java maven web项目目录结构

    java web项目 web项目下web根目录名称是可以更改的 idea中新建java web项目,默认src为Sources Root,当然也可以手动改,在Sources Root下右键只能新建Pa ...

  7. Eclipse中如何添加相对路径的外部jar包

    在eclipse中进行java编程的时候,常常需要引用外部jar包.而采用相对路径引用jar包可以大大方便java工程的拷贝,这样使得java工程从一个路径转移到另一个路径时不用大费周章的修改外包ja ...

  8. pom文件中引入依赖成功了,但是jar包找不着

    编写代码的时候总是会碰到各种奇奇怪怪的问题,最近引入依赖的时候发现依赖虽然引入成功了,而且查看仓库,仓库中也存在该jar包,但是项目代码中并没有找到该jar包,重新导入reimport各种都试了还是不 ...

  9. Maven 手动安装JAR包到本地maven仓库后,但在项目中依旧报错找不到JAR包解决方法

    本博客包含的内容: ①手动安装jar包到本地仓库: ②解决Missing artifact org.source.fastdfs:fastdfs:jar问题 .personSunflowerP { b ...

随机推荐

  1. STM32入门系列-库目录及文件介绍

    已经介绍了过了CMSIS标准,ST公司按照这个标准设计了一套基于STM32F10x的固件库,我们可以直接在ST公司的官网进行下载,现在给大家STM32最新固件库v3.5,在网盘上给大家提供了下载包,链 ...

  2. DES 实现

    原理 加密 置换: IP逆置换: 迭代: PC-1置换: PC-2置换: 子秘钥的生成: 加密函数f: 解密 代码 // C语言实现 #include<stdio.h> #include& ...

  3. CF715E—— Complete the Permutations

    传送门:QAQQAQ 题意:给你两个$1$~$n$的排列,0表示该位置数字不确定,两两交换第一个排列中的元素使之变成第二个排列,令$s[x]$表示对于所有不同的两个排列,最少交换次数为$x$的序列有$ ...

  4. XJOI 夏令营501-511测试11 统计方案

    小B写了一个程序,随机生成了n个正整数,分别是a[1]..a[n],他取出了其中一些数,并把它们乘起来之后模p,得到了余数c.但是没过多久,小B就忘记他选了哪些数,他想把所有可能的取数方案都找出来.你 ...

  5. .NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部?

    奇怪的问题 最近在公司有个系统需要调用第三方的一个webservice.本来调用一个下很简单的事情,使用HttpClient构造一个SOAP请求发送出去拿到XML解析就是了. 可奇怪的是我们的请求在运 ...

  6. Flink基础:实时处理管道与ETL

    ​ 往期推荐: Flink基础:入门介绍 Flink基础:DataStream API Flink深入浅出:资源管理 Flink深入浅出:部署模式 Flink深入浅出:内存模型 Flink深入浅出:J ...

  7. Doctrine\ORM\QueryBuilder 源码解析之 where

    背景 最近有需求实现类似于 QueryBuilder 的谓词语句,就去翻看了它的源码.先看两个例子 例子1 $qb = $em->createQueryBuilder(); $qb->se ...

  8. JS基础算法题(二)

    1.1 数组去重的五种方法 数组去重:将数组中重复的元素去掉 JS数组没有删除具体元素的删除(只能删掉值,删不掉元素的索引),可以使用另外一个结构来进行存储 新数组 新对象 JS数组虽然本质可以删除第 ...

  9. SSH个人小结

    初学SSH的一些总结,主要来源于谷歌搜索和鸟叔的教程http://cn.linux.vbird.org/linux_server/0310telnetssh_2.php 以及阮一峰的博客http:// ...

  10. MySQL视图详细介绍

    前言: 在MySQL中,视图可能是我们最常用的数据库对象之一了.那么你知道视图和表的区别吗?你知道创建及使用视图要注意哪些点吗?可能很多人对视图只是一知半解,想详细了解视图的同学看过来哟,本篇文章会详 ...