原因:

  使用paramiko库ssh连接到远端云主机上时,非常偶现卡死现象,连接无法退出(可以是执行命令时云主机重启等造成)。需要给定一段时间,不管命令执行是否卡住,都退出连接,显示命令执行超时错误。

实现方式:

线程+事件,在线程中执行ssh命令,给事件配置超时时间。

代码示例:

1 from threading import Thread, Event

2 import paramiko

 1 class SshClient(object):
2
3 def __init__(self, ip, port, username, password):
4 self.ip = ip
5 self.host = host
6 self.username = username
7 self.password = password
8
9 def exec_command(cmd, timeout):
10 log.info(u"在ip:%s上执行命令%s" % (self.ip, cmd))
11 sc = paramiko.SSHClient()
12 sc.set_missing_host_key_policy(paramiko.AutoAddPolicy())
13
14 # 用来接收stdout stderror status信息
15 res = [None, None, None]
16
17 def get_return(start_event, res_list):
18 _, cmd_stdout, cmd_stderr = sc.exec_command(command=cmd, timeout=timeout)
19 channel = cmd_stdout.channel
20 cmd_status = channel.recv_exit_status()
21 res_list[0] = cmd_stdout
22 res_list[1] = cmd_stderr
23 res_list[2] = cmd_status
24 start_event.set() # 表示线程已经执行完毕
25
26 try:
27 sc.connect(hostname=self.ip, port=self.port, username=self.username, password=self.password, timeout=30) # 这里的timeout是连接使用的,与我们要的不同
28 start_evt = Event()
29 t = Thread(target=get_return, args=(start_evt, res))
30 t.start()
31 start_evt.wait(timeout=timeout)
32 # 执行到这里说明线程已经退出
33 if None in res:
34 raise Exception(u"命令超时退出")
35 stdout, stderr, status = res
36 if status != 0:
37 raise Exception(u"命令执行返回非0!返回值为%s,错误信息为%s" % (status, stdout.read() + stderr.read()))
38 return stdout.read() + stderr.read()
39 finally:
40 sc.close()
41 }

使paramiko库执行命令时,在给定的时间强制退出的更多相关文章

  1. PHP 执行命令时sudo权限的配置

    PHP 执行命令时sudo权限的配置 1.先写一个PHP文件 <?php system('whoami'); 先看自己的apache2的用户是谁,下面是笔者的截图,笔者使用apche2的用户是w ...

  2. 远程ssh执行命令时提示找不到命令

    最开始的时候碰到这种问题,是在hadoop003上配置了jdk1.8, 在hadoop002上执行ssh hadoop003 java -version提示没有命令,先ssh hadoop003然后执 ...

  3. Ubuntu执行命令时,不sudo提示权限不足,sudo提示找不到该命令

    问题:Ubuntu执行命令时,不sudo提示权限不足,sudo提示找不到该命令 补充描述:尝试将命令所在路径添加到/etc/profile中(所有用户环境变量),结果sudo -i切换到root用户后 ...

  4. 使用paramiko远程执行命令、下发文件

    写部署脚本时,难免涉及到一些远程执行命令或者传输文件. 之前一直使用sh库,调用sh.ssh远程执行一些命令,sh.scp传输文件,但是实际使用中还是比较麻烦的,光是模拟用户登陆这一点,还需要单独定义 ...

  5. Python学习总结 06 paramiko 远程执行命令

    有时会需要在远程的机器上执行一个命令,并获得其返回结果.对于这种情况,python 可以很容易的实现. 1 工具 Python paramiko 1) Paramiko模块安装 在Linux的Term ...

  6. python之paramiko 远程执行命令

    有时会需要在远程的机器上执行一个命令,并获得其返回结果.对于这种情况,python 可以很容易的实现. 1 .工具 Python paramiko 1) Paramiko模块安装 在Linux的Ter ...

  7. sh脚本变量赋值时同时执行命令时的环境问题

    在v2ex看到一个问题: 允许在一个命令之前立即发生一个或多个变量赋值,这些赋值为跟随着的命令更改环境变量,这个赋值的影响是暂时的. 那为什么: int=100 int=10 echo $(($int ...

  8. Ubuntu在终端执行命令时出现的错误

    1.在安装jdk时无意间结束了安装进程,然后就提示这个错误 E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)E: 无法锁定管理目录(/var/lib/d ...

  9. python在执行命令时添加环境变量或指定执行路径

    cwd: 命令的执行路径,相当于os.chdir('/home')提前切换到对应路径 env: 环境变量,某些执行路径需要添加必须的环境变量,例如fastboot依赖与adb路径下的环境变量 impo ...

随机推荐

  1. 2019牛客暑期多校训练营(第四场)A-meeting(树的直径)

    >传送门< 题意:n给城市有n-1条路相连,每两个城市之间的道路花费为1,有k个人在k个城市,问这k个人聚集在同一个城市的最小花费 思路:(官方给的题解写的挺好理解的) 考虑距离最远的两个 ...

  2. Codeforces Round #340 (Div. 2) E. XOR and Favorite Number

    time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standa ...

  3. bnuoj24252 Divide

    Alice and Bob has found a island of treasure in byteland! They find N kinds of treasures on the isla ...

  4. Linux 搭建网站

    wget http://dl.wdlinux.cn/lanmp_laster.tar.gz tar zxvf lanmp_laster.tar.gz sh lanmp.sh https://www.w ...

  5. vlc音视频开发(二)环境搭建(VS篇)

    来源:微信公众号「编程学习基地」 目录 简介 VS配置vlc开发环境 下载vlc源码 创建vlc环境 测试vlc代码 运行vlc程序 完成项目文件获取 简介 VLC 是一款自由.开源的跨平台多媒体播放 ...

  6. CF1463-B. Find The Array

    题意: 给出一个由n个数组成的数组a,这个数组的元素和为S,要求你找出一个由n个数字组成数组b,这个数组满足: 数组中的每个数可以将他两边的数字整除或者被他两边的数字整除 数组b中每个位置的数字减去数 ...

  7. 二进制安装kubernetes(六) kube-proxy组件安装

    Kube-Proxy简述 参考文献: https://ywnz.com/linuxyffq/2530.html 运行在每个节点上,监听 API Server 中服务对象的变化,再通过管理 IPtabl ...

  8. Win7环境下mysql报错1045:Access denied for user root@localhost错误解决方法

    产生场景:在涉及到连接数据库操作的时候,会报1045:Access denied for user root@localhost. 比如:本地建立的数据库连接不上,在IDEA等开发工具中使用反向生成. ...

  9. Spring(四) SpringDI(1)

    Spring 自动装配之依赖注入 依赖注入发生的时间 当 Spring IOC 容器完成了 Bean 定义资源的定位.载入和解析注册以后,IOC 容器中已经管理类 Bean 定义的相关数据,但是此时 ...

  10. node.js 中间件

    node.js 中间件 node.js middleware Express middleware body-parser cookie-parser cookie-session cors csur ...