首页 > 系统相关 >Fabric不能启动后台进程问题

Fabric不能启动后台进程问题

时间:2023-06-11 17:33:31浏览次数:60  
标签:Fabric 进程 hosts fab env 后台 远程 def 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

标签:Fabric,进程,hosts,fab,env,后台,远程,def,fabric
From: https://blog.51cto.com/u_6186189/6458371

相关文章

  • vue后台管理系统实现全屏展示
    效果图展示直接上代码<!--全屏显示--><divclass="btn-fullscreen"@click="handleFullScreen"><el-tooltipeffect="dark":content="fullscreen?`取消全屏`:`全屏`"placement="bottom">......
  • trc golang 进程请求追踪包
    trc是一个方便的golang进程请求追踪框架,可以提供方便的请求追踪查看参考使用代码来说官方示例,完整的可以查看官方packagemain import("context""fmt""log""math/rand""net/http""net/http/httptest"_"net/http/pprof""strings""t......
  • mysql 进程初始化killed问题
    问题描述:[root@it01soft]#/mysql/mysql57/bin/mysqld--defaults-file=/etc/my.cnf--user=mysql--initialize-insecure--consoleKilled问题分析:1.查看错误日志,错误日志报错如下:[root@it01soft]#more/mysqldata/mysql_3306/log/mysql-error.log2023-06-09T19:49:59.796928......
  • 超长文本消息回写企业微信端后台应用遭到截断
    当向企业微信的自建应用推送消息时:消息内容最长不超过2048个字节,超过将截断。为此通过简单的拆分字符回写解决,解决方式如下关键代码:根据非单词字符拆分字符串String[]parts=content.split("(?<=\\W)");privatevoidwriteResponse(Responseresponse){Stringcontent......
  • (进程管理)05.进程的调度算法
    (进程管理)05.进程的调度算法 进程调度,就是绪状态的进程获得CPU的使用权,进程由就绪状态转变成运行状态。进程调度可以分为:抢占式系统会根据进程的优先级高低来进行调度,进程之间可以插队非抢占式系统按照先来先服务的方式来调度,进程间不能插队进程调度算法有很多,......
  • nginx优化配置进程数与cpu亲和性之间的关系,你真正了解吗???
    关于nginx的进程数的配置,以及cpu亲和性的配置,大家能了解多少呢? worker_processes:配置线程数在高并发的web服务器场景下,并发实际是有进程处理,那么为了保障处理并发,线程数肯定要事先启动足。打个比方就像是开餐厅,开业之前需要招聘相对数量的服务员来接待客户。而worker_process......
  • Python多进程使用队列共享数据协同判断素数
    感谢江西师范大学李雪斌老师提供素材和第一版本代码。问题描述:创建两个队列,qIn用来存储指定范围内的整数,qOut用来存放该范围内的所有素数。创建多个进程,每个进程依次从qIn队列中获取整数,并判断是否为素数,如果是素数则存入qOut。技术要点:1)使用Python标准库multiprocessing创建和管理......
  • django admin 后台手动添加数据,设置表单默认自动填充默认值,get_form函数
    需求admin添加数据,表单某字段默认填充值。例如电话号默认填充前缀:+86 效果 实现方法:https://www.codenong.com/529890/在数据库表模型对应的admin后台的管理文件admin.py 内对应Admin管理类配置get_form函数@admin.register(models.UserInfo)classUserInfoAdmi......
  • 多线程与多进程
    多线程与多进程一,什么是进程,什么是线程?​ 进程:运行中的程序.每次我们执行一个程序,咱们的操作系统对自动的为这个程序准备一些必要的资源(例如,分配内存,创建一个能够执行的线程.)​ 线程:程序内,可以直接被CPU调度的执行过程.是操作系统能够进行运算调度的最......
  • Python进阶:进程的状态及基本操作
    文章目录Python进阶篇-系列文章全篇一、进程以及状态二、[重点]进程-基本使用三、[重点]进程-名称、PID四、[重点]进程-参数传递、全局变量问题五、[重点]进程-守护主进程六、进程、线程对比七、[重点]消息队列-基本操作八、消息队列-常见判断九、[重点]Queue实现进程间通信十、[......