Fabric入门
前言
Fabric是一个用Python写的SSH连接工具,可用于应用开发、部署和系统管理。
我的项目需要使用SSH远程登录到服务器中执行某个命令,可以使用Fabric实现整个流程。但我只需要在一台服务器上执行命令,使用Fabric有些浪费,完全可以使用更轻的框架。好在Fabric很容易上手,就暂定用它执行命令。
以下内容来自Fabric的官方文档《Overview and Tutorial》
什么是Fabric
Fabric提供一套SSH组件,包括Python库和命令行工具,用于应用开发和系统管理。简单说,Fabric有下面两种工具:
- 通过命令行远程执行Python函数
- 使用Python函数通过ssh远程执行shell命令
Hello, fab
创建一个fabfile.py文件
在命令行中使用fab命令运行
任务参数
为上面函数添加参数
运行,参数格式 :,=,….
下面方式具有同样效果
本地命令
使用{py}fabric.api.local{/py}函数在本机运行shell命令,从这里我们将开始看到Fabric的强大功能。
fabfile.py
运行结果如下
组织fabfile
比如分成多个子任务
输出与之前一样
故障
Fabirc检查命令操作的返回值,如果没有正常退出则终止。
在fabfile.py中加入一个肯定会出错的命令。
运行出错
可以看到,运行出错后,不再运行后续任务
故障处理
环境变量warn_only,可以将abort转为warning,并提供灵活的处理方式
fabfile
出错时,会根据用户输入决定是否运行后面的程序
运行
vagrant@precise64:/vagrant/sms_log_agent_monitor$ fab prepare_deploy
[localhost] local: date
2015年 02月 15日 星期日 07:10:39 UTC
[localhost] local: who
vagrant pts/0 2015-02-15 01:15 (10.0.2.2)
vagrant pts/1 2015-02-11 12:03 (10.0.2.2)
vagrant pts/2 2015-02-14 13:11 (10.0.2.2)
vagrant pts/4 2015-02-14 13:16 (10.0.2.2)
vagrant pts/5 2015-02-15 02:56 (10.0.2.2)
[localhost] local: asdagasdg
/bin/sh: 1: asdagasdg: not found
Warning: local() encountered an error (return code 127) while executing ‘asdagasdg’
Test failed. Continue anyway? [Y/n] Y
[localhost] local: uname -a
Linux precise64 3.8.0-44-generic #66~precise1-Ubuntu SMP Tue Jul 15 04:01:04 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Done.
建立连接
Fabric最强大的功能,通过SSH远程执行任务
修改任务
执行任务,会提示输入host,使用ssh连接形式user@host:port
也可以在命令行中给出host。
运行结果
远程交互
Fabric可以与远端进行对话,看下面的例子
fabfile.py
运行
提前定义连接
最常见的方法,设置env.hosts列表
在fabfile模块头部设置env.hosts
运行
总结
本文介绍了Fabric的基本功能:
- 定义任务,并用fab命令执行
- 使用local运行本地命令
- 使用settings修改环境变量
- 处理命令出错,提醒用户,手动中止
- 定义host列表,使用run远程执行命令。
附录
Python 3 中需要使用经过修改的 Fabric,使用如下语句安装: