0
点赞
收藏
分享

微信扫一扫

Fabric不能启动后台进程问题


在用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

举报

相关推荐

0 条评论