python fabric库

Fabric简介

Fabric 是一个 Python 库,用于执行本地或远程服务器上的命令,并且可以处理文件传输。它基于 SSH 协议,非常适合自动化服务器管理任务。

1. 安装 Fabric

pip install fabric
sudo apt install fabric

2. SSH 密钥

Fabric 通过 SSH 连接到远程服务器。确保你有 SSH 密钥对,并将其添加到远程服务器的 ~/.ssh/authorized_keys 文件中。

3. 编写 Fabric 脚本

Fabric 脚本是一个 Python 脚本,可以在其中定义任务和函数。以下是一些基本的示例:

3.1 本地执行-定义任务

新建脚本文件fabfile.py写入,因为没有使用Connection进行远程连接,因此是在本地执行

from fabric import Connection, task

@task
def hello(c):
    c.run('echo "Hello, Fabric!"')

shell 执行fab hello

3.2 python执行-连接到远程服务器

执行 python fabfile.py

def main():
    host = 'remotehost'
    user = 'remoteuser'
    c = Connection(host=host, user=user)
    with c.cd('/path/to/directory'):
        c.run('ls')
    with c.cd('/path/to/another/directory'):
        c.run('ls')

if __name__ == '__main__':
    main()

3.3 定义任务-在远程服务器执行命令

fab指令会自动寻找名为fabfile.py的文件然后找到里面的@task进行执行,task必须传递c参数

from fabric import Connection, task

@task
def hello(c):
    host = 'remotehost'
    user = 'remoteuser'
    c = Connection(host=host, user=user)
    with c.cd('/home/ubuntu/'):
        c.run('ls')

shell执行fab hello即可在远程服务器执行

4. 处理文件传输

Fabric 传输文件

from fabric import Connection, task

@task
def upload_file(c):
	host = 'remotehost'
    user = 'remoteuser'
    c = Connection(host=host, user=user)
    c.put('local_file_path', 'remote_file_path')

@task
def download_file(c):
 	host = 'remotehost'
    user = 'remoteuser'
    c = Connection(host=host, user=user) 
    c.get('remote_file_path', 'local_file_path')

5. 并行执行任务

Fabric 并行执行任务

from fabric import Connection, task, parallel

@task
def task1(c):
    c.run('echo "Running task 1"')

@task
def task2(c):
    c.run('echo "Running task 2"')

@parallel
def parallel_tasks(c):
    task1(c)
    task2(c)

fab parallel_tasks

6. 错误处理

使用 try-except 块来捕获和处理错误

from fabric import Connection, task

@task
def check(c):
    try:
        result = c.run('ls nonexistent_file', warn=True)
    except Exception as e:
        print(f"An error occurred: {e}")
    else:
        print(result)

7. 使用 Fabric API

Fabric 提供了一个丰富的 API,允许执行更复杂的任务:

  • run: 执行命令。
  • sudo: 以超级用户权限执行命令。
  • get: 从远程服务器获取文件。
  • put: 将文件上传到远程服务器。
  • open_shell: 打开一个交互式 shell。

8. 官方文档

posted @ 2024-07-19 14:15  Fxe0_0  阅读(27)  评论(0)    收藏  举报