首先是安装fabric包
pip install fabric
fabric常用参数
-l : 显示定义好的任务函数名
-f : 指定fab入口文件,默认入口文件名为fabfile.py
-H : 指定目标主机,多台主机用","号分割
fabric常用API
local : 执行本地命令,如:local('uname -s')
lcd : 切换本地目录,如:lcd('/home')
cd : 切换远程目录,如:cd('/etc')
run : 执行远程命令,如:run('free -m')
sudo : sudo方式执行远程命令,如:sudo('touch /abc')
put : 上传本地文件到远程主机,如:put('/hello', '/home/baagee/hello')
get : 从远程主机下载文件到本地,如:get('/home/python/world', '/home/baagee/world')
reboot : 重启远程主机,如:reboot()
@task : 函数装饰器,标识的函数为fab可调用的,非标记的对fab不可见,纯业务逻辑
@runs_once : 函数装饰器,标识的函数只会执行一次,不受多台主机影响
fabric全局属性设定
env.hosts : 定义目标主机,如:env.hosts=['192.168.117.192', '192.168.117.193']
env.user : 定义用户名,如:env.user="root"
env.port : 定义目标主机端口,默认为22,如:env.port="22"
env.password : 定义密码,如:env.password="lijin"
env.passwords : 不同的主机不同的密码,如:env.passwords={'baagee@192.168.117.192:22':'lovelijin', 'lijin@192.168.117.193:22':'lovebaagee'}
简单入门示例
from fabric.api import run def host_type(): run('uname -s')
执行的话就不能用python fabfile.py执行了要使用:fab -f fabfile.py host_type -H baagee@192.168.117.136
意思就是-f指定文件,后面跟要执行的函数,-H指明登录用户名和host,
[root@localhost pythontest]# fab -f fabfile.py host_type -H baagee@192.168.117.136 [baagee@192.168.117.136] Executing task 'host_type' [baagee@192.168.117.136] run: uname -s [baagee@192.168.117.136] Login password for 'baagee': [baagee@192.168.117.136] out: Linux [baagee@192.168.117.136] out: Done. Disconnecting from baagee@192.168.117.136... done. [root@localhost pythontest]
示例1:动态获取远程目录列表
首先写个小例子熟悉一下这东西到底要怎么用:
from fabric.api import * env.hosts=['192.168.117.136'] env.user='baagee' env.password = 'ubuntu@2017' @runs_once def input_raw(): return prompt("please input directory name:", default="/home") def workask(dirname): run('ls -l ' + dirname) @task def go(): print('start ...') getdirname = input_raw() workask(getdirname) print('end ...')
go函数是入口函数,首先获取用户输入的路径,然后ls它,显示里面的文件就是这么简单。
执行结果显示:
[root@localhost pythontest]# fab -f test3.py go [192.168.117.136] Executing task 'go' start ... please input directory name: [/home] /home/baagee/baagee-blog [192.168.117.136] run: ls -l /home/baagee/baagee-blog [192.168.117.136] out: 总用量 24 [192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 0 8月 22 15:05 abcd [192.168.117.136] out: drwxrwxr-x 6 baagee baagee 4096 8月 3 10:37 Application [192.168.117.136] out: drwxrwxr-x 2 baagee baagee 4096 8月 3 10:37 DB_back [192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 1009 8月 3 10:37 index.php [192.168.117.136] out: drwxrwxr-x 3 baagee baagee 4096 8月 3 10:37 Public [192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 97 8月 3 10:37 README.md [192.168.117.136] out: drwxrwxr-x 8 baagee baagee 4096 8月 3 10:37 ThinkPHP [192.168.117.136] out: end ... Done. Disconnecting from 192.168.117.136... done.
熟悉了之后接下来就是写一个小程序将本地某个文件夹的代码上传到执行服务器,然后执行它;
示例2:上传文件并执行
首先写个小代码:(demo.py)
#coding:utf-8 def add(a,b): print('开始计算a+b') print(a+b) add(9,1)
将本机centos7上的demo.py上传到ubuntu上并执行:
#coding:utf-8 from fabric.api import * env.user = 'baagee' env.hosts = ['192.168.117.136'] env.password = 'ubuntu@2017' @task @runs_once def tar_task(): #进入本地目录 with lcd('/home/vagrant/windowshare/pythontest'): #打包 local('tar zcvf demo.tar.gz demo.py') @task def put_task(): #创建远程服务器文件夹 run('mkdir -p /home/baagee/testdemo') with cd('/home/baagee/testdemo'): #上传文件 put('/home/vagrant/windowshare/pythontest/demo.tar.gz', '/home/baagee/testdemo/demo.tar.gz') @task def check_task(): #md5验证文件 lmd5 = local('md5sum /home/vagrant/windowshare/pythontest/demo.tar.gz', capture=True).split(' ')[0] rmd5 = run('md5sum /home/baagee/testdemo/demo.tar.gz').split(' ')[0] if lmd5 == rmd5: print('md5 OK ...') else: print('md5 ERROR ...') @task def run_task(): with cd('/home/baagee/testdemo'): run('tar zxvf demo.tar.gz') run('python demo.py') @task def go(): tar_task() put_task() check_task() run_task()
步骤就是
1,找到demo.py打包,。2,上传,。3,验证文件md5。4,然后就是解压执行。
也很简单,当然你也可以一次性填写多个host,将他们同时上传到多台服务器上。
最后程序在我centos上执行的效果是:
[root@localhost pythontest]# fab -f upload1.py go [192.168.117.136] Executing task 'go' [localhost] local: tar zcvf demo.tar.gz demo.py demo.py [192.168.117.136] run: mkdir -p /home/baagee/testdemo [192.168.117.136] put: /home/vagrant/windowshare/pythontest/demo.tar.gz -> /home/baagee/testdemo/demo.tar.gz [localhost] local: md5sum /home/vagrant/windowshare/pythontest/demo.tar.gz [192.168.117.136] run: md5sum /home/baagee/testdemo/demo.tar.gz [192.168.117.136] out: 12b4bed255ad7afb6a53cc84bd7a25e7 /home/baagee/testdemo/demo.tar.gz [192.168.117.136] out: md5 OK ... [192.168.117.136] run: tar zxvf demo.tar.gz [192.168.117.136] out: demo.py [192.168.117.136] out: [192.168.117.136] run: python demo.py [192.168.117.136] out: 开始计算a+b [192.168.117.136] out: 10 [192.168.117.136] out: Done. Disconnecting from 192.168.117.136... done.
最后结合git完成代码部署:
需要服务器和本地都需要安装git
#coding:utf-8 from fabric.api import * #这两台服务器用户名和密码都一样,所以就不用env.passwords了 env.user = 'baagee' env.hosts = ['192.168.117.192', '192.168.117.193'] env.password = 'pythontestpass' @runs_once @task def local_update(): #本地代码上传到git with lcd("/home/baagee/tmp/baageehello"): local("git add -A") local("git commit -m 'update'") local("git pull origin master") local("git push origin master") @task def remote_update(): #服务器将git上的代码拉下来 with cd("/home/baagee/tmp/baageehello"): run("git checkout master") run("git pull origin master") @task def deploy(): #本地上传 local_update() #服务器下拉 remote_update()
over。。。。。。。。。。。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]