安装: easy_install fabric 或 pip install fabric

验证:

#python

>>> import  fabric

有时候我们可以直接使用命令行的形式执行:

#fab -p rootroot -H 10.1.1.21,10.1.1.22 -- 'uname -s'

fab命令引用默认的文件名为 fabfile.py 如果使用非默认文件名称,则需通过 "-f" 来指定。如果管理机与目标主机未配置密钥认证信任,将会提示输入目标主机对应账号登录密码。

Fabric提供几个简单的API来完成所有的部署,最常用的是local()和run(),分别在本地和远程执行命令,put()可以把本地文件上传到远程,当需要在远程指定当前目录时,只需用with cd('/path/to/dir/'):即可。

默认情况下,当命令执行失败时,Fabric会停止执行后续命令。有时,我们允许忽略失败的命令继续执行,比如run('rm /tmp/abc')在文件不存在的时候有可能失败,这时可以用

with settings(warn_only=True):执行命令,这样Fabric只会打出警告信息而不会中断执行。

Fabric是如何在远程执行命令的呢?其实Fabric所有操作都是基于SSH执行的,必要时它会提示输入口令,所以非常安全。更好的办法是在指定的部署服务器上用证书配置无密码的ssh连接。

常用API:

local  执行本地命令,如:local('uname -s')

lcd     切换本地目录,如:lcd('/home')

cd     切换远程目录

run    执行远程命令,如run('free -m')

sudo  sudo方式执行远程命令,如sudo('/etc/init.d/httpd start')

put    上传本地文件到远程主机,如put('/home/user.info', '/data/user.info')

get    从远程主机下载文件到本地,如get('/data/user.info', '/home/root.info')

prompt  获得用户输入信息,如prompt('please input your ID:')或prompt('please input uour ID:',default='123' )

confirm  获得提示信息确认,如confirm("Test failed.Continue[Y/N]?")。  当 if confirm("Continue [Y/N]?")时,输入Y/y表示为真,条件成立。

reboot   重启远程主机,如reboot()

@task   函数修饰符,标识的函数为fab可调用的,非标记对fab不可见,纯业务逻辑

@runs_once  函数修饰符,标识的函数只会执行一次,不受多台主机影响

-------------------------------------------------------------------------------------------

set命令相关:

功能说明:
        设置shell

语  法:
        set [+-abCdefhHklmnpPtuvx]

补充说明:
set指令能设置所使用shell的执行方式,可依照不同的需求来做设置。

参  数:
-a 标示已修改的变量,以供输出至环境变量。
-b 使被中止的后台程序立刻回报执行状态。
-C 转向所产生的文件无法覆盖已存在的文件。
-d Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
-e 若指令传回值不等于0,则立即退出shell。
-f 取消使用通配符。
-h 自动记录函数的所在位置。
-H Shell 可利用"!"加<指令编号>的方式来执行history中记录的指令。
-k 指令所给的参数都会被视为此指令的环境变量。
-l 记录for循环的变量名称。
-m 使用监视模式monitor,允许作业控制。
-n 只读取指令,而不实际执行。
-p 启动优先顺序模式。
-P 启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
-t 执行完随后的指令,即退出shell。
-u 当执行时使用到未定义过的变量,则显示错误信息。
-v 显示shell所读取的输入值。
-x 执行指令后,会先显示该指令及所下的参数。
+<参数> 取消某个set曾启动的参数。

Finally, I was able to figure out how to startup tomcat remotely with fabric.

The issue was in background tasks as they will be killed when the command ends.

The solution is simple: just add "set -m;" prefix before command. The full fabric command should be:

sudo('set -m; /opt/tomcat/bin/startup.sh')
例如:
#!/usr/bin/python
#coding:utf-8
from fabirc.api import *
from fabric.colors import *
#env.hosts=['10.1.1.42']
env.roledefs = { #当采用角色组时,注意定义go时,要使用execute()
'myhost': ['10.1.1.42','10.1.1.43'],
'myhost2': ['10.1.1.43']
}
env.user='root'
env.tomcatpath='/yly/tomcat7.callback80' @roles('myhost')
def shutdowntomcat():
with cd(env.tomcatpath):
with settings(warn_only=True):
run("ps -ef|grep tomcat|grep -v 'grep'|grep callback|awk '{print $2}'|xargs kill -9")
run("rm -fr ./logs/*;rm -fr ./work/*")
print green ("41 tomcat for callback already shutdown! ")

@roles('myhost')
def shut_tom():
    with cd(env.project_ss):
    result=local('touch /tmp/jiajia')
    if result.failed and not confirm("continue away?"):   #此处not confirm表示当输入n
    run("touch /tmp/jiajia222")

@roles('myhost2')
def starttomcat():
with cd(env.tomcatpath):
with settings(warn_only=True):
run("set -m ; sh ./bin/startup.sh")
print yellow ("41 tomcat for callback already started!") @task #限定只有go函数对fab命令可见,其它shut_tom、starttomcat则无法使用fab调用。当去掉@task时,或每个函数都加上@task时方可调用所有已有函数。
def go():
execute(shutdownmytomcat)
execute(shut_tom)
execute(starttomcat)

参考资料:http://fabric-chs.readthedocs.org/zh_CN/chs/

http://paperplane.ruhoh.com/fabric/fabric-api/

fabric应用的更多相关文章

  1. Azure Service Fabric 开发环境搭建

    微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...

  2. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

  3. MySQL: Fabric 搭建 HA

    搭建好Fabric之后,就可以在它的基础上创建HA Group. Shard Group.HA+Shard Group等.这里来说明一下如何快速的搭建HA环境. Fabric 192.168.2.23 ...

  4. MySQL:Fabric 安装

    MySQL Fabric安装 MySQL Fabric是Oracle提供的用于辅助进行ha\sharding的工具,它的基本架构: 从上面看出,借助于Fabric, 可以搭建 HA 集群.Sharin ...

  5. Fabric远程自动化使用说明

    背景: 关于Fabric的介绍,可以看官网说明.简单来说主要功能就是一个基于Python的服务器批量管理库/工具,Fabric 使用 ssh(通过 paramiko 库)在多个服务器上批量执行任务.上 ...

  6. MySQL Fabric和MyBatis的整合过程中遇到的问题

    这是我昨天在整合MySQL Fabric和MyBatis时遇到的问题,花了大半天才解决的问题,解决的过程中在网上查找了很久,都没有找到解决的方案.现在记下来,希望能够帮助有同样问题的朋友.如果各位朋友 ...

  7. FABRIC单机开发者模式启动

    在开始之前需要导出一个自定义变量,方便后续操作: export FABRIC=/opt/gopath/src/github.com/hyperledger/fabric/devenv 1.在真机上执行 ...

  8. fabric devenv Vagrantfile配置

    Vagrantfile文件只会在第一次执行vagrant up时调用执行,其后如果不明确使用vagrant reload,则不会被强制重新加载. # This is the mount point f ...

  9. python fabric install

    1,install setuptools 2,install pip 3,install pycrpto 4,install paramiko 5,install fabric

  10. [Python Fabric] [SSH] Mac OS X 10.9 + Vagrant虚拟环境使用Python Fabric进行SSH远程登录的简单实验

    1. ssh客户端生成key $ Generating public/private rsa key pair. Enter file in which to save the key (/Users ...

随机推荐

  1. mysql 严格模式 Strict Mode说明

    1.开启与关闭Strict Mode方法 找到mysql安装文件夹下的my.cnf(windows系统则是my.ini)文件 在sql_mode中增加STRICT_TRANS_TABLES则表示开启严 ...

  2. java 中的 hashcode

    在Java的Object类中有一个方法: public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没 ...

  3. admin.ModelAdmin 后台管理关联对象,某个字段怎么显示值

    admin.ModelAdmin 后台管理关联对象,某个字段如何显示值?对象 WxpAccount:              accountName = ... 对象 AccountMenu:    ...

  4. Dynamics CRM 2011 怎么根据记录的etc参数值找到实体英文名和根据etc参数值或英文名称找到其实体中文名称

    一.平常我们可以打开CRM2011一条已创建的记录,通过JScript方法获取实体英文名的方法是:按F12,输入contentIFrame.Xrm.Page.data.entity.getEntity ...

  5. GitHub10岁之际HanLP自然语言处理包用户量跃居榜首

    在本周,GitHub终于度过了属于它自己的十周岁生日.这个在2008年由3个来自旧金山的年轻人创建的基于Git的代码托管网站,先后超越了元老级的SourceForge和背景强大的Google Code ...

  6. 【selenium】下拉框和弹出框处理

    #-*-coding=utf-8 from selenium import webdriver import os,time driver= webdriver.Firefox() driver.ge ...

  7. IntelliJ IDEA常用设置

    IntelliJ IDEA进入设置界面. “File”->“Settings”,进入如下界面: 界面主题设置    CTR+鼠标滚动键改变编辑区字体大小.设置鼠标在系统类上指定时间显示注释. 设 ...

  8. 如何制作Jar包并在android中调用jar包

    android制作jar包: 新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在java file specification 中不要选择androidmani ...

  9. bzoj3295 动态逆序对

    Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...

  10. ThinkJava-复用类

    7 .2 继承语法 例子: package com.cy.reusing; import static com.java.util.Print.*; class Cleanser { private ...