一、关于fabric本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
fabric是一个Python的库,同时它也是一个命令行工具。使用fabric提供的命令行工具,可以很方便地执行应用部署和系统管理等操作。fabric依赖于paramiko进行ssh交互,fabric的设计思路是通过几个API接口来完成所有的部署,因此fabric对系统管理操作进行了简单的封装,比如执行命令,上传文件,并行操作和异常处理等。本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
二、fabric执行任务步骤本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
fabric执行任务的步骤如下:
1.创建任务列表,这些任务就是fab命令行参数指定的任务,fab会保持这些任务的顺序
2.对于每个任务,构造需要执行该任务的服务器列表,服务器列表可以通过命令行参数指定,或者env.hosts指定,或者通过hosts和roles装饰器指定
3.遍历任务列表,对于每一台服务器分别执行任务,可以将任务列表和服务器列表看作是两个for循环,任务列表是外层循环,服务器列表是内存循环,fabric默认是串行执行的可以通过装饰器或者命令行参数确定任务执行的方式
4.对于没有指定服务器的任务默认为本地任务,仅执行一次本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
三、关于fabric的task及装饰器本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
task是fabric需要在远程服务器上执行的函数,在fabric中有3中用方法定义一个task,默认情况下,fabfile中的所有函数对象都是一个task,但是如果我们使用了task装饰器,显示的定义了一个task,那么其他没有通过task装饰器装饰的函数将不会被认为是一个task。
有两种方式实现task类,一是fabfile中的task继承自fabric的task类,比较难用,不推荐。另一个方法是使用fabric的task装饰器,这是使用fabric最快速的方式,也是推荐的用法。本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
from fabric.api import * @task def task1(): run('do task1')本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
装饰器除了task还有一个可能有用的就是runs_once:意思是这个任务只能执行一次,防止task被多次调用。例如对目录打包上传的动作对不同的服务器上传可能会执行多次,但是打包的动作只需要执行一次即可。本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
四、fabric常用方法列表:本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
run():在远程服务器上执行Linux命令,还有一个重要的参数pty,如果我们执行命令以后需要有一个常驻的服务进程,那么就需要设置pty=False,避免因为Fabric退出导致进程的退出
local():用以执行本地命令,返回要执行的命令,local是对Python的Subprocess模块的封装,更负载的功能可以直接使用Subprocess模块,包含capture参数,默认为False,表示subprocess输出的信息进行显示,如果不想显示,那么指定capture=True即可
sudo():与run类似,使用管理员权限在远程服务器上执行shell命令,还有一个重要的参数pty,同run方法。
get():从远程服务器上获取文件,通过remote_path参数声明从何处下载,通过local_path表示下载到何处。remote_path支持通配符。
示例:get(remote_path='/tmp/test.pid',local_path='/tmp/test_local.pid')
put():将本地的文件上传到远程服务器,还可以通过mode参数执行远程文件的权限配置。
示例:put(remote_path='/tmp/test.pid',local_path='/tmp/test_local.pid')本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
path():配置远程服务器PATH环境变量,只对当前会话有效,不会影响远程服务器的其他操作,path支持模式append、prepend、replace。
with path('/tmp','prepend'):
run("echo $PATH")
cd():切换远程目录,使用中发现cd()也能切换本地目录。
lcd():切换本地目录
with cd(dir):本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
settings():通用配置,用于临时覆盖env变量
with settings(hide('everything'), warn_only=True): #关闭warning显示
reboot():重启远程服务器,可以通过wait参数设置等待几秒钟重启
reboot(wait=30)
quiet():隐藏全部输出,仅在执行错误的时候发出告警信息,功能等同于 with settings(hide('everything'),warn_only=True)
propmt():用以在Fabric执行任务的过程中与管理员进行交互,类似于python的input
shell_env():设置shell脚本的环境变量,等同于shell中的export
with shell_env(HTTP_PROXY='127.0.0.1'):
run('echo $HTTP_PROXY')本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
五、其它utils函数本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
utils函数包含一些辅助行的功能函数,这些函数位于fabric.utils下,常用的函数如下:
abort:终止函数执行,打印错误信息到stderr,并且以退出码1退出。
warn:输出警告信息,但是不会终止函数的执行
puts:打印输出,类似于Python中的print函数本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
#utils函数的使用 def test(): abort('abort') #直接退出 warn('warn') #发出提示信息但不会退出 puts('message') #会打印括号中的信息,和print一样。本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
六、带颜色的输出 本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
fabric为了让输出日志更具有可读性,对命令行中断的颜色输出进行了封装,使用print打印带有不同颜色的文本,这些颜色包含在fabric.colors中。像warn,puts打印输出的,也可以直接渲染颜色,bold加粗,常用颜色如下:本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
blue(text,bold=False) 蓝色 green(text,bold=False) 绿色 red(text,bold=False) 红色 yellow(text,bold=False) 黄色 def test(): warn(yellow('----->warn')) #会发出提示信息,不会退出 puts(green('----->puts')) #会打印括号中的信息 print(green('the text is green')) # 单纯的渲染文字:
最后:关于fabric的并行模式: 通过命令行参数-P(--parallel)通知Fabric并行执行task 通过env.parallel设置设否需要并行执行 通过parallel装饰器通知Fabric并行执行task,它接受一个pool_size作为参数(默认为0),表示可以有几个任务并行执行本文地址:http://www.04007.cn/article/968.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/968.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |