p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }
p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

Fabric是基于Python实现的SSH命令行工具。可以采用命令行的方式来执行SSH。可以认为是在paramiko的基础上做了更高一层的封装。来看下如何使用。

我们直接使用fab -H 192.168.0.9的时候提示错误,找不到任何的fabfiles

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance# fab -H 192.168.0.9

Fatal
error: Couldn't find any fabfiles!

Remember
that -f can be used to specify fabfile path, and use -h for help.

Aborting

我们现在就来编写fabfiles.

from
fabric.api import run

def
host_type():

run('ls
-al')

然后再按照如下方式的使用。可以看到远程连接成功。

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -H 192.168.0.9 -f chapter7.py host_type

[192.168.0.9]
Executing task 'host_type'

[192.168.0.9]
run: ls -al

[192.168.0.9]
out: total 68

[192.168.0.9]
out: drwx------ 11 root root 4096 Oct 31 22:07 .

[192.168.0.9]
out: drwxr-xr-x 22 root root 4096 Jul 9 16:59 ..

[192.168.0.9]
out: -rw------- 1 root root 5403 Oct 31 22:36 .bash_history

[192.168.0.9]
out: -rw-r--r-- 1 root root 3106 Feb 20 2014 .bashrc

[192.168.0.9]
out: drwx------ 5 root root 4096 Aug 31 21:47 .cache

[192.168.0.9]
out: drwx------ 4 root root 4096 Jul 26 10:47 .config

[192.168.0.9]
out: drwx------ 3 root root 4096 Jul 9 15:59 .dbus

[192.168.0.9]
out: drwx------ 2 root root 4096 Jul 9 16:23 .gvfs

[192.168.0.9]
out: drwxr-xr-x 3 root root 4096 Jul 26 11:23 .local

[192.168.0.9]
out: drwxr-xr-x 2 root root 4096 Jul 26 11:33 .pip

[192.168.0.9]
out: -rw-r--r-- 1 root root 140 Feb 20 2014 .profile

[192.168.0.9]
out: drwxr-xr-x 3 root root 4096 Jul 26 11:41 .python-eggs

[192.168.0.9]
out: drwxr-xr-x 2 root root 4096 Oct 30 21:18 .rpmdb

[192.168.0.9]
out: drwx------ 2 root root 4096 Oct 27 23:11 .ssh

[192.168.0.9]
out: -rw-r--r-- 1 root root 0 Oct 29 10:02 test.txt

[192.168.0.9]
out: -rw------- 1 root root 5439 Oct 31 22:07 .viminfo

[192.168.0.9]
out:

Done.

Disconnecting from 192.168.0.9

-f:指定fab入口文件,默认入口文件位fabfile.py

-g:指定网关设备

-H:指定目标主机

-P:以异步方式运行多主机任务

-R:指定角色区分不同业务组设备

-t:设置设备连接超时时间

-T:设置远程主机命令执行超时时间

-w: 当命令执行失败,发出告警,而非默认终止任务

我们也可以直接采用命令行的方式来执行。注意--前后都有空格

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -H 192.168.0.9 -- 'ls -al'

fabric提供了一组功能强大的fabric.api命令集。主要有以下的方法:

local:执行本地命令

lcd:切换本地目录

cd:切换远程目录

run:执行远程命令

sudo:sudo方式执行远程命令

put:上传文件到远程主机

get:从远程主机下载文件到本地

prompt:获得用户输入信息

confirm:获得提示信息确认

reboot:重启远程主机

@task:函数修饰符,标识的函数位为fab可调用的。非标记对fab不可见

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

下面来看下fabfile的编写:

首先是全局属性设定:evn
evn对象的作用是定义fabrile的全局设定。支持多个属性,包括目标主机,用户,密码,角色等。来看下面的例子。首先通过env设置用户以及远程主机IP

from
fabric.api import *

env.user='root'

env.hosts=['192.168.0.9']

def
remote_task():

with
cd("/home/zhf"): #with的作用是让后面的表达式的语句集成当前状态实现cd
/home/zhf && ls -al的效果

run("ls
-al")

执行结果:

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task

[192.168.0.9]
Executing task 'remote_task'

[192.168.0.9]
run: ls -al

[192.168.0.9]
out: total 59372

[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 .

[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 ..

[192.168.0.9]
out: -rw------- 1 zhf zhf 847 Oct 29 10:14 .bash_history

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 220 Jul 2 16:44 .bash_logout

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 3760 Jul 2 16:44 .bashrc

[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 11:03 .cache

[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 10:49 .config

[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 9 09:19 .dbus

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 09:29 Desktop

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 25 Jul 2 16:54 .dmrc

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Documents

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 11:03 Downloads

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 8980 Jul 2 16:44 examples.desktop

[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Nov 1 21:04 .gconf

[192.168.0.9]
out: -rw------- 1 zhf zhf 5920 Nov 1 21:04 .ICEauthority

[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 2 16:55 .local

[192.168.0.9]
out: drwx------ 4 zhf zhf 4096 Jul 26 10:46 .mozilla

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Music

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Pictures

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 675 Jul 2 16:44 .profile

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Public

[192.168.0.9]
out: drwx------ 2 zhf zhf 4096 Oct 27 23:05 .ssh

[192.168.0.9]
out: -rw-r--r-- 1 root root 12376 Oct 29 21:21 syslogin.log

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Templates

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Videos

[192.168.0.9]
out: -rw-rw-r-- 1 zhf zhf 60638465 Oct 18 2013
VMwareTools-9.6.1-1378637.tar.gz

[192.168.0.9]
out: drwxr-xr-x 7 zhf zhf 4096 Oct 18 2013
vmware-tools-distrib

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 25 12:04 .wireshark

[192.168.0.9]
out: -rw------- 1 zhf zhf 64 Nov 1 21:04 .Xauthority

[192.168.0.9]
out: -rw------- 1 zhf zhf 354 Nov 1 21:04 .xsession-errors

[192.168.0.9]
out: -rw------- 1 zhf zhf 1576 Oct 31 22:36
.xsession-errors.old

[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Jul 26 11:34 zhf

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 2 17:51 下载

[192.168.0.9]
out:

Done.

Disconnecting
from 192.168.0.9... done.

我们再来看一个例子,前面的例子通过with
cd("/home/zhf")设定死了远程切换的路径。下面的例子实现动态获取远程目录列表

from fabric.api import *
env.user='root'
env.hosts=['192.168.0.9']

@runs_once
def input_raw():
    return prompt("please input directory name:",default="/home")

def worktask(dirname):
    run("ls -al "+dirname)

def reomte_task():
    with cd('/home/zhf'):
        run('ls -al')

@task
def go():
    getdirname=input_raw()
    worktask(getdirname)

执行效果如下

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py go

[192.168.0.9]
Executing task 'go'

please
input directory name: [/home] /home

[192.168.0.9]
run: ls -al /home

[192.168.0.9]
out: total 2664

[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 .

[192.168.0.9]
out: drwxr-xr-x 22 root root 4096 Jul 9 16:59 ..

[192.168.0.9]
out: drwx------ 2 root root 16384 Jul 2 16:27 lost+found

[192.168.0.9]
out: -rwxr--r-- 1 root root 2696108 Oct 29 10:07 root

[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 zhf

[192.168.0.9]
out:

Done.

Disconnecting
from 192.168.0.9... done.

那么这个@task修饰符究竟起什么作用呢,我们前面写过remote_task函数,这个是没有被task修饰的,函数中只有go是被task修饰的。我们来执行下remote_task看下结果。提示找不到remote_task,只有go是可用的命令。这正好说明了@task是表示函数仅对fab有效的作用。

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task

Warning:
Command(s) not found:

remote_task

Available
commands:

go

... done.

Fab的参数如下:

-l:显示定义好的任务函数名

-f:指定fab入口文件,默认入口文件位fabfile.py

-g:指定网关设备

-H:指定目标主机

-P:以异步方式运行多主机任务

-R:指定角色区分不同业务组设备

-t:设置设备连接超时时间

-T:设置远程主机命令执行超时时间

-w:
当命令执行失败,发出告警,而非默认终止任务

我们也可以直接采用命令行的方

-f:指定fab入口文件,默认入口文件位fabfile.py

-g:指定网关设备

-H:指定目标主机

-P:以异步方式运行多主机任务

-R:指定角色区分不同业务组设备

-t:设置设备连接超时时间

-T:设置远程主机命令执行超时时间

-w:
当命令执行失败,发出告警,而非默认终止任务

我们也可以直接采用命令行的方式来执行。注意--前后都有空格

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -H 192.168.0.9 -- 'ls -al'

fabric提供了一组功能强大的fabric.api命令集。主要有以下的方法:

local:执行本地命令

lcd:切换本地目录

cd:切换远程目录

run:执行远程命令

sudo:sudo方式执行远程命令

put:上传文件到远程主机

get:从远程主机下载文件到本地

prompt:获得用户输入信息

confirm:获得提示信息确认

reboot:重启远程主机

@task:函数修饰符,标识的函数位为fab可调用的。非标记对fab不可见

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

下面来看下fabfile的编写:

首先是全局属性设定:evn
evn对象的作用是定义fabrile的全局设定。支持多个属性,包括目标主机,用户,密码,角色等。来看下面的例子。首先通过env设置用户以及远程主机IP

from
fabric.api import *

env.user='root'

env.hosts=['192.168.0.9']

def
remote_task():

with
cd("/home/zhf"): #with的作用是让后面的表达式的语句集成当前状态实现cd
/home/zhf && ls -al的效果

run("ls
-al")

执行结果:

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task

[192.168.0.9]
Executing task 'remote_task'

[192.168.0.9]
run: ls -al

[192.168.0.9]
out: total 59372

[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 .

[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 ..

[192.168.0.9]
out: -rw------- 1 zhf zhf 847 Oct 29 10:14 .bash_history

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 220 Jul 2 16:44 .bash_logout

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 3760 Jul 2 16:44 .bashrc

[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 11:03 .cache

[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 10:49 .config

[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 9 09:19 .dbus

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 09:29 Desktop

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 25 Jul 2 16:54 .dmrc

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Documents

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 11:03 Downloads

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 8980 Jul 2 16:44 examples.desktop

[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Nov 1 21:04 .gconf

[192.168.0.9]
out: -rw------- 1 zhf zhf 5920 Nov 1 21:04 .ICEauthority

[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 2 16:55 .local

[192.168.0.9]
out: drwx------ 4 zhf zhf 4096 Jul 26 10:46 .mozilla

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Music

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Pictures

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 675 Jul 2 16:44 .profile

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Public

[192.168.0.9]
out: drwx------ 2 zhf zhf 4096 Oct 27 23:05 .ssh

[192.168.0.9]
out: -rw-r--r-- 1 root root 12376 Oct 29 21:21 syslogin.log

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Templates

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Videos

[192.168.0.9]
out: -rw-rw-r-- 1 zhf zhf 60638465 Oct 18 2013
VMwareTools-9.6.1-1378637.tar.gz

[192.168.0.9]
out: drwxr-xr-x 7 zhf zhf 4096 Oct 18 2013
vmware-tools-distrib

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 25 12:04 .wireshark

[192.168.0.9]
out: -rw------- 1 zhf zhf 64 Nov 1 21:04 .Xauthority

[192.168.0.9]
out: -rw------- 1 zhf zhf 354 Nov 1 21:04 .xsession-errors

[192.168.0.9]
out: -rw------- 1 zhf zhf 1576 Oct 31 22:36
.xsession-errors.old

[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Jul 26 11:34 zhf

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 2 17:51 下载

[192.168.0.9]
out:

Done.

Disconnecting
from 192.168.0.9... done.

我们再来看一个例子,前面的例子通过with
cd("/home/zhf")设定死了远程切换的路径。下面的例子实现动态获取远程目录列表

from fabric.api import *
env.user='root'
env.hosts=['192.168.0.9']

@runs_once
def input_raw():
    return prompt("please input directory name:",default="/home")

def worktask(dirname):
    run("ls -al "+dirname)

def reomte_task():
    with cd('/home/zhf'):
        run('ls -al')

@task
def go():
    getdirname=input_raw()
    worktask(getdirname)

执行效果如下

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py go

[192.168.0.9]
Executing task 'go'

please
input directory name: [/home] /home

[192.168.0.9]
run: ls -al /home

[192.168.0.9]
out: total 2664

[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 .

[192.168.0.9]
out: drwxr-xr-x 22 root root 4096 Jul 9 16:59 ..

[192.168.0.9]
out: drwx------ 2 root root 16384 Jul 2 16:27 lost+found

[192.168.0.9]
out: -rwxr--r-- 1 root root 2696108 Oct 29 10:07 root

[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 zhf

[192.168.0.9]
out:

Done.

Disconnecting
from 192.168.0.9... done.

那么这个@task修饰符究竟起什么作用呢,我们前面写过remote_task函数,这个是没有被task修饰的,函数中只有go是被task修饰的。我们来执行下remote_task看下结果。提示找不到remote_task,只有go是可用的命令。这正好说明了@task是表示函数仅对fab有效的作用。

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task

Warning:
Command(s) not found:

remote_task

Available
commands:

go

式来执行。注意--前后都有空格

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -H 192.168.0.9 -- 'ls -al'

fabric提供了一组功能强大的fabric.api命令集。主要有以下的方法:

local:执行本地命令

lcd:切换本地目录

cd:切换远程目录

run:执行远程命令

sudo:sudo方式执行远程命令

put:上传文件到远程主机

get:从远程主机下载文件到本地

prompt:获得用户输入信息

confirm:获得提示信息确认

reboot:重启远程主机

@task:函数修饰符,标识的函数位为fab可调用的。非标记对fab不可见

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

下面来看下fabfile的编写:

首先是全局属性设定:evn
evn对象的作用是定义fabrile的全局设定。支持多个属性,包括目标主机,用户,密码,角色等。来看下面的例子。首先通过env设置用户以及远程主机IP

from
fabric.api import *

env.user='root'

env.hosts=['192.168.0.9']

def
remote_task():

with
cd("/home/zhf"): #with的作用是让后面的表达式的语句集成当前状态实现cd
/home/zhf && ls -al的效果

run("ls
-al")

执行结果:

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task

[192.168.0.9]
Executing task 'remote_task'

[192.168.0.9]
run: ls -al

[192.168.0.9]
out: total 59372

[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 .

[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 ..

[192.168.0.9]
out: -rw------- 1 zhf zhf 847 Oct 29 10:14 .bash_history

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 220 Jul 2 16:44 .bash_logout

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 3760 Jul 2 16:44 .bashrc

[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 11:03 .cache

[192.168.0.9]
out: drwx------ 17 zhf zhf 4096 Jul 26 10:49 .config

[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 9 09:19 .dbus

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 09:29 Desktop

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 25 Jul 2 16:54 .dmrc

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Documents

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 26 11:03 Downloads

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 8980 Jul 2 16:44 examples.desktop

[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Nov 1 21:04 .gconf

[192.168.0.9]
out: -rw------- 1 zhf zhf 5920 Nov 1 21:04 .ICEauthority

[192.168.0.9]
out: drwx------ 3 zhf zhf 4096 Jul 2 16:55 .local

[192.168.0.9]
out: drwx------ 4 zhf zhf 4096 Jul 26 10:46 .mozilla

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Music

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Pictures

[192.168.0.9]
out: -rw-r--r-- 1 zhf zhf 675 Jul 2 16:44 .profile

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Public

[192.168.0.9]
out: drwx------ 2 zhf zhf 4096 Oct 27 23:05 .ssh

[192.168.0.9]
out: -rw-r--r-- 1 root root 12376 Oct 29 21:21 syslogin.log

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Templates

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 9 14:35 Videos

[192.168.0.9]
out: -rw-rw-r-- 1 zhf zhf 60638465 Oct 18 2013
VMwareTools-9.6.1-1378637.tar.gz

[192.168.0.9]
out: drwxr-xr-x 7 zhf zhf 4096 Oct 18 2013
vmware-tools-distrib

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 25 12:04 .wireshark

[192.168.0.9]
out: -rw------- 1 zhf zhf 64 Nov 1 21:04 .Xauthority

[192.168.0.9]
out: -rw------- 1 zhf zhf 354 Nov 1 21:04 .xsession-errors

[192.168.0.9]
out: -rw------- 1 zhf zhf 1576 Oct 31 22:36
.xsession-errors.old

[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Jul 26 11:34 zhf

[192.168.0.9]
out: drwxr-xr-x 2 zhf zhf 4096 Jul 2 17:51 下载

[192.168.0.9]
out:

Done.

Disconnecting
from 192.168.0.9... done.

我们再来看一个例子,前面的例子通过with
cd("/home/zhf")设定死了远程切换的路径。下面的例子实现动态获取远程目录列表

from
fabric.api import *

env.user='root'

env.hosts=['192.168.0.9']

@runs_once

def
input_raw():

return
prompt("please input directory name:",default="/home")

def
worktask(dirname):

run("ls
-al "+dirname)

@task
#设置task使得仅有go对fab可见

def
go():

getdirname=input_raw()
#通过inpu_raw获得手动输入路径

worktask(getdirname)
#执行命令

执行效果如下

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py go

[192.168.0.9]
Executing task 'go'

please
input directory name: [/home] /home

[192.168.0.9]
run: ls -al /home

[192.168.0.9]
out: total 2664

[192.168.0.9]
out: drwxr-xr-x 4 root root 4096 Oct 29 10:07 .

[192.168.0.9]
out: drwxr-xr-x 22 root root 4096 Jul 9 16:59 ..

[192.168.0.9]
out: drwx------ 2 root root 16384 Jul 2 16:27 lost+found

[192.168.0.9]
out: -rwxr--r-- 1 root root 2696108 Oct 29 10:07 root

[192.168.0.9]
out: drwxr-xr-x 21 zhf zhf 4096 Nov 1 21:04 zhf

[192.168.0.9]
out:

Done.

Disconnecting
from 192.168.0.9... done.

那么这个@task修饰符究竟起什么作用呢,我们前面写过remote_task函数,这个是没有被task修饰的,函数中只有go是被task修饰的。我们来执行下remote_task看下结果。提示找不到remote_task,只有go是可用的命令。这正好说明了@task是表示函数仅对fab有效的作用。

root@zhf-linux:/home/zhf/zhf/python_prj/auto_manintance#
fab -f chapter7.py remote_task

Warning:
Command(s) not found:

remote_task

Available
commands:

go

python自动化运维七:fabric的更多相关文章

  1. Python自动化运维工具-Fabric部署及使用总结

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  2. Python自动化运维工具fabric的安装

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  3. 轻量级自动化运维工具Fabric的安装与实践

    一.背景环境 在运维工作中,经常会遇到重复性的劳动,这个时候为了效率就必须要使用自动化运维工具. 这里我给大家介绍轻量级自动化运维工具Fabric,Fabric是基于Python语言开发的,是开发同事 ...

  4. Python自动化运维的职业发展道路(暂定)

    Python职业发展之路 Python自动化运维工程 Python基础 Linux Shell Fabric Ansible Playbook Zabbix Saltstack Puppet Dock ...

  5. Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|

    内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...

  6. Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...

  7. python自动化运维之CMDB篇-大米哥

    python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ  ...

  8. Day1 老男孩python自动化运维课程学习笔记

    2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...

  9. python自动化运维学习第一天--day1

    学习python自动化运维第一天自己总结的作业 所使用到知识:json模块,用于数据转化sys.exit 用于中断循环退出程序字符串格式化.format字典.文件打开读写with open(file, ...

随机推荐

  1. Oracle游标详解大全

    本文出自: http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html -- 声明游标:CURSOR cursor_name IS sel ...

  2. Hibernate中的主键生成器generator

    本文讲述Hibernate的generator属性的意义.Generator属性有7种class,本文简略描述了这7种class的意义和用法. [xhtml] view plaincopy <c ...

  3. Dstl Satellite Imagery Feature Detection-Data Processing Tutorial

    如何读取WKT格式文件 我们找到了这些有用的包: Python - shapely.loads() R - rgeos 如何读取geojson格式文件 我们找到了这些有用的包: Python -  j ...

  4. spring mvc 经常出现的错误

    spring mvc 经常出现的错误 spring3.0 和jdk 1.8不是很兼容.有时候会出现一些错误 建议使用spring 4.0和jdk1.8搭配使用 书籍 spring mvc 学习指南上面 ...

  5. 深入理解计算机系统chapter3

    栈在处理过程调用中起到至关重要的作用,栈向下增长,栈顶元素的地址是所有栈中元素最小的.栈指针%esp保存着栈顶元素的地址 控制: 重点: 基于条件数据传送的代码比基于条件控制转移(预测错误惩罚比较高) ...

  6. 一个基于Asp.net MVC的博客类网站开源了!

    背景说明: 大学时毕业设计作品,一直闲置在硬盘了,倒想着不如开源出来,也许会对一些人有帮助呢,而且个人觉得这个网站做得还是不错了,毕竟是花了不少心思,希望对你有所帮助. github地址:https: ...

  7. POJ1083 Moving Tables(模拟)

    The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in ...

  8. 怎样学好哲学(lucas+费马小定理)

    怎样学习哲学 时间限制: 1 Sec  内存限制: 128 MB提交: 97  解决: 27[提交][状态][讨论版] 题目描述 OI大师抖儿在夺得银牌之后,顺利保送pku.这一天,抖儿问长者:&qu ...

  9. JavaWeb(五)之JSTL标签库

    前言 前面介绍了EL表达式,其实EL表达式基本上是和JSTL核心标签库搭配一起使用才能发挥效果的.接下来让我们一起来认识一下吧! 在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行 ...

  10. JavaScript 版数据结构与算法(四)集合

    今天,我们要讲的是数据结构与算法中的集合. 集合简介 什么是集合?与栈.队列.链表这些顺序数据结构不同,集合是一种无序且唯一的数据结构.集合有什么用?在 Python 中,我经常使用集合来给数组去重: ...