Fabric是Python中一个非常强大的批量远程管理和部署工具,常用于在多个远程PC上批量执行SSH任务.
常见的使用方法大概总结如下:
1, 首先,要将批量执行的任务写入到一个fabfile.py中,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# -*- coding:utf-
8
-*-
from fabric.api
import
run, local, roles, env, cd
env.hosts=[
'192.168.1.110'
,
'192.168.1.111'
,
'192.168.1.112'
]
env.user=
"username"
env.password=
"password"
env.port=
22
#env.parallel=True
#env.skip_bad_hosts=True
#env.timeout=
1
#env.warn_only=True
# local用于在本地PC执行命令.
# run用于在远程PC执行命令.
def ls():
with cd(
'/home/workspace/project'
):
local(
'touch 1.log'
)
with cd(
'/home/workspace/project2'
):
local(
'touch 2.log'
)
#
@parallel
, 可以设置是否并行执行
#
@serial
def pull():
with cd(
'/home/workspace/project'
):
run(
'git pull'
)
def clean():
with cd(
'/home/workspace/project'
):
run(
'bash clean.sh'
)
@hosts
(
'192.168.1.113'
)
def robot(device):
with cd(
'/home/workspace/project'
):
run(
'bash run.sh %s robot && sleep 1'
% device)
|
其中有两个小的注意事项,
A,在远程机器的run.sh中如果要执行一些非系统常见的工具,最好指定为绝对路径. 且可以适当地使用nohup的方式.
B,执行其他脚本或者命令后最好加上sleep,以防止Fabric过早地关闭与远程PC连接的session,而导致执行任务失败.
2, 执行过程: fabric执行会默认选取当前目录下的fabfile.py文件,
fab clean
fab pull
fab robot:hosts="192.168.1.115",device=5560
可以通过hosts参数给fabric传入指定的远程PC, 该hosts参数的优先级比env.hosts的要高.
也可以给fab中的命令传递参数,如device.
此外,还可以通过fab -f otherFabFile.py clean来指定其他的fabric文件.
以上,只是一些简单的用法,如果需要更高级的用法,可以关注该项目的github主页 https://github.com/fabric/fabric.