Fabric错误拾遗

Fabric是一个很强大的工具,可以将自动化部署或者多机操作的命令固化到一个脚本里,和某些运维工具很像,用它主要是因为,python…
简单好用易上手,当然,shell各种命令组合起来也可以,上古神器和现代兵器的区别。

初次使用fabric,在验证登录以及写日志等遇到了一些问题,有些问题网上也找不到合适的答案,只能自己解决了,记录下来分享一下。

问题一: ssh可登录,但是fabric却登录不上而且没任何提示

测试代码:

绿盟科技ssh测试代码

绿盟科技ssh测试代码

使用fabric执行却没有任何提示。。。

fabric

fabric

ssh可以登录,但只能执行部分命令.说明机器出问题了。

ssh

ssh

解决方案:

使用fabric底层使用的ssh库paramiko,可以正确捕获到登录异常。代码如下:

异常登录1

异常登录1

问题二: 命令执行异常时,捕获不到异常和输出

代码如下:

代码2

代码2

执行命令后,却捕获不到异常:

捕获不到异常1

捕获不到异常1

解决方案:

(1)定义自己的异常类,覆盖env.abort_exception,修改后如下:

修改1

修改1

可以看到,可以输出异常信息了:

异常信息1

异常信息1

(2) 上面解决方案只能输出异常信息,并没有输出out部分内容,为了捕获异常时命令输出,这里利用StringIO,修改代码如下:

修改2

修改2

执行命令,可以看出异常和命令输出都可以捕获到:

异常信息2

异常信息2

问题三:多进程日志乱序

fabric开启并发后,由于是多进程,写日志会随机的出现错乱。

解决方案:

在执行命令前对每个host创建一个日志文件,这样在执行命令时进程只会忘对应host的日志写,在整个命令执行完毕后将所有host对应的日志合并。

如果您需要了解更多内容,可以
加入QQ群:486207500
直接询问:010-68438880-8669

发表评论