官方网站:
http://docs.fabfile.org/en/1.6/
安装: # easy_install fabric 用法: # fab -h Options: -h, --help show this help message and exit -d NAME, --display=NAME print detailed info about command NAME -F FORMAT, --list-format=FORMAT formats --list, choices: short, normal, nested -I, --initial-password-prompt Force password prompt up-front -l, --list print list of possible commands and exit --set=KEY=VALUE,... comma separated KEY=VALUE pairs to set Fab env vars --shortlist alias for -F short --list -V, --version show program's version number and exit -a, --no_agent don't use the running SSH agent -A, --forward-agent forward local agent to remote end --abort-on-prompts abort instead of prompting (for password, host, etc) -c PATH, --config=PATH specify location of config file to use -D, --disable-known-hosts do not load user known_hosts file -e, --eagerly-disconnect disconnect from hosts as soon as possible -f PATH, --fabfile=PATH python module file to import, e.g. '../other.py' -g HOST, --gateway=HOST gateway host to connect through --hide=LEVELS comma-separated list of output levels to hide -H HOSTS, --hosts=HOSTS comma-separated list of hosts to operate on -i PATH path to SSH private key file. May be repeated. -k, --no-keys don't load private key files from ~/.ssh/ --keepalive=N enables a keepalive every N seconds --linewise print line-by-line instead of byte-by-byte -n M, --connection-attempts=M make M attempts to connect before giving up --no-pty do not use pseudo-terminal in run/sudo -p PASSWORD, --password=PASSWORD password for use with authentication and/or sudo -P, --parallel default to parallel execution method --port=PORT SSH connection port -r, --reject-unknown-hosts reject unknown hosts --system-known-hosts=SYSTEM_KNOWN_HOSTS load system known_hosts file before reading user known_hosts -R ROLES, --roles=ROLES comma-separated list of roles to operate on -s SHELL, --shell=SHELL specify a new shell, defaults to '/bin/bash -l -c' --show=LEVELS comma-separated list of output levels to show --skip-bad-hosts skip over hosts that can't be reached --ssh-config-path=PATH Path to SSH config file -t N, --timeout=N set connection timeout to N seconds -T N, --command-timeout=N set remote command timeout to N seconds -u USER, --user=USER username to use when connecting to remote hosts -w, --warn-only warn, instead of abort, when commands fail -x HOSTS, --exclude-hosts=HOSTS comma-separated list of hosts to exclude -z INT, --pool-size=INT number of concurrent processes to use in parallel mode
如果不是用-f选项,脚本文件名必须是fabfile.py,执行实例: # fab run_hide run_parallel run_parallel 如脚本所示,每个函数是一个任务。fab命令后跟任务名称,写几个就执行几次
fabfile.py脚本文件内容如下:
#!/usr/bin/env python #coding:utf-8 from fabric.contrib.files import * from fabric.api import * from fabric.colors import * from fabric.tasks import * ###颜色输出 print(red(" my ") + green(" name ") + blue(" is ") + yellow(" lishengjia ")) ###如果使用fab --ssh-config-path=选项的话,可以是配置文件中ssh相关选项生效(默认是不生效的) env.usesshconfig = True ###设定远程登录的单用户 env.user = 'root' ###自定义用于认证的私钥 env.key_filename = '/root/weibo' ###设置任务执行所用的全局默认主机列表 env.hosts = ['10.13.82.232', '10.13.82.233'] ###角色的定义,为每个角色定义一个主机组,可以为主机组执行任务,优先级大于env.hosts env.roledefs={ 'tornado':['10.13.82.232','10.13.82.233'], 'mops':['10.10.81.90'] } @roles('tornado') def run_test(): '''this is two test''' run('ifconfig') ####并发 @parallel (或者@parallel(pool_size=100) 限定并发为100) def run_parallel(): run('date>>test.txt') ###任务执行加参数(在命令行下的使用方式为:# fab nginx_log:btime=1,etime=2) def nginx_log(btime,etime): print btime,etime ####顺序执行,不加参数,默认就是顺序执行 @serial def run_serial(): run('date>>test.txt') run('sleep 1') ###进行与操作 def run_and(): with prefix('cd /opt/'): with prefix('ls'): run('ifconfig') ####远程主机目录切换 def run_dir(): with cd('/tmp/'): run('ls') with cd('/opt/'): run('ls') ###上传文件到远端服务器 def run_put(): put('/root/1.sh','/root/1.sh') ###指定本次任务执行对应的ip,优先级较高,会忽略env.hosts和--list命令中host的设定 @hosts('10.13.82.232') ###从远端服务器下载文件 def run_get(): get('/root/1.sh','/tmp/') ###执行出错命令的捕获,当执行get命令fail的时候,执行print语句 with settings(warn_only=True): if get(sfilename,dfilename).failed: print "warning:%s is not log!" % partname ###本地切换工作目录及执行命令 def run_local(): lcd('/opt/scripts/') local('ls') local('ifconfig') ###给远程主机文件进行的操作 def run_append(): """this is a function to append file on remote host""" ###远程主机文件追加 append('1.sh','my name is lee!') ###判断文件或者目录是否存在,存在就返回True if exists('/root/2.sh'): print 'ok' else: print "false" ###判断远程主机的文件中是否存在文本 if contains('/root/1.sh','lee'): print "OK" ###隐藏输出 def run_hide(): with hide('running', 'stdout', 'stderr'): run('ls /var/www') ###多个任务一起执行 def run_tasks(): execute(run_local) execute(run_append)
转载于:https://blog.51cto.com/leejia/1202118