在用Fabric启动远程后台进程时,由于自己的后台程序使用类似下面的方式后台运行,导致后台进程不能启动成功
java MyServer &
看了一下官方文档,说是有几种方式可以解决这个问题,下面是我使用的方法
首先修改自己的启动后台进程的脚本
nohup java MyServer &> /dev/null &
然后修改fabric脚本,在远程运行时增加pty=False参数,比如
def start():
2 run('execute_my_programe', pty=False)
Fabric批量远程执行操作
JUNE 14, 2015 BY KONGXX · COMMENTS OFFON FABRIC批量远程执行操作
最近有个需求就是要在一个集群的多个机器上运行一些命令,比如启动、停止服务,运行一些脚本收集一些数据等,于是找到了python的一个框架Fabric。Fabric是一个Python库,用于简化使用SSH的应用程序部署或系统管理任务。
它提供的主要功能包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入、中止执行等。
1. 安装
在我的CentOS上,运行下面的命令就可以简单安装
yum install http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
2 yum install fabric.noarch
2. 测试脚本
在当前目录下创建fabfile.py文件,fabric默认总是使用fabfile.py作为它的配置文件,当然也可以使用-f来指定使用的配置文件,内容如下:
def hello():
2 print("Hello fab!")
然后运行”fab hello”,可以得到如下结果
Hello fab!
下面看看参数怎样传递
def hello(name):
2 print 'Hello %s!'%name
然后运行”fab hello:name=fab”,可以得到如下结果
Hello fab!
3. 执行本地操作
from fabric.api import *
2 def test():
3 local('cd /tmp')
4 local('ls -l')
4. 执行远程操作
from fabric.api import *
2 env.hosts=['kongxx@host1:22','kongxx@host2:22']
3 env.password='Letmein'
4 def test():
5 with('cd /tmp'):
6 run('ls -l')
其中env.hosts定义了要远程执行的机器列表,env.password是要登录远程机器的密码。
5. 基本命令知道咋用了,下面就看看怎样实现我需要的功能,由于我需要批量在200多台机器上批量启动服务和执行命令,所有这些机器都配置了免密码登录,这样就不需要配置env.password了
5.1 首先准备了一个机器列表文件,比如把所有机器名写在/tmp/hosts文件中,每行一个机器名,类似如下
host1
2 host2
3 host3
4 ...
5.2 fabfile.py文件内容
from fabric.api import *
02 import os
03
04 def set_hosts():
05 f=open('/tmp/hosts', 'r')
06 env.hosts=f.readlines()
07 f.close()
08
09 @parallel(pool_size=5)
10 def start():
11 print("start service")
12 prepare_hosts()
13 run('/etc/init.d/myservice start')
14
15 @parallel(pool_size=5)
16 def stop():
17 print("stop service")
18 prepare_hosts()
19 run('/etc/init.d/myservice stop')
20
21 @parallel(pool_size=5)
22 def status():
23 print("check service status")
24 prepare_hosts()
25 run('/etc/init.d/myservice status')
这里由于机器比较多,因此使用了“@parallel(pool_size=5)”来使fabric使用并发方式执行,当然也可以使用命令行参数指定使用并发方式“fab -P -z 5 ”。
运行下面命令即可批量执行启动、停止、查询状态操作
fab set_hosts start|stop|status
标签:Fabric,进程,hosts,fab,env,后台,远程,def,fabric
From: https://blog.51cto.com/u_6186189/6458371