`

Fabric不能启动后台进程问题

阅读更多

      在用Fabric启动远程后台进程时,由于自己的后台程序使用类似下面的方式后台运行,导致后台进程不能启动成功

1 ...
2 java MyServer &

看了一下官方文档,说是有几种方式可以解决这个问题,下面是我使用的方法

首先修改自己的启动后台进程的脚本

1 ...
2 nohup java MyServer &> /dev/null &

然后修改fabric脚本,在远程运行时增加pty=False参数,比如

1 def start():
2     run('execute_my_programe', pty=False)

Fabric批量远程执行操作

最近有个需求就是要在一个集群的多个机器上运行一些命令,比如启动、停止服务,运行一些脚本收集一些数据等,于是找到了python的一个框架Fabric。Fabric是一个Python库,用于简化使用SSH的应用程序部署或系统管理任务。
它提供的主要功能包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入、中止执行等。

1. 安装
在我的CentOS上,运行下面的命令就可以简单安装

2. 测试脚本
在当前目录下创建fabfile.py文件,fabric默认总是使用fabfile.py作为它的配置文件,当然也可以使用-f来指定使用的配置文件,内容如下:

1 def hello():
2     print("Hello fab!")

然后运行”fab hello”,可以得到如下结果
Hello fab!

下面看看参数怎样传递

1 def hello(name):
2     print 'Hello %s!'%name

然后运行”fab hello:name=fab”,可以得到如下结果
Hello fab!

3. 执行本地操作

1 from fabric.api import *
2 def test():
3     local('cd /tmp')
4     local('ls -l')

4. 执行远程操作

1 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文件中,每行一个机器名,类似如下

1 host1
2 host2
3 host3
4 ...

5.2 fabfile.py文件内容

01 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 ”。
运行下面命令即可批量执行启动、停止、查询状态操作

1 fab set_hosts start|stop|status
分享到:
评论

相关推荐

    windows service demo

    在IT行业中,Windows服务是一种特殊类型的后台应用程序,它在没有用户界面的情况下运行,通常用于执行自动任务或提供持续的服务。"Windows Service Demo" 指的可能是一个示例项目,展示了如何在Windows操作系统中...

    dae源文件的压缩包

    在Hyperledger Fabric的部署中,可能用到这个库来支持后台守护进程(daemon)的管理,这对于在服务器上运行和管理区块链节点至关重要。 在使用这套组件进行区块链开发时,你需要了解以下知识点: 1. **区块链基础*...

    crashlytics.zip

    2. **初始化Crashlytics**:在应用的启动代码中调用`Fabric.with([Crashlytics.self])`(Swift)或`[Fabric with:@[[Crashlytics class]]]`(Objective-C)以启动Crashlytics服务。 3. **处理未捕获的异常**:...

    iOS开发学习之监测程序的崩溃次数详解

    或者集成第三方崩溃报告服务如Firebase Crashlytics、Fabric、HockeyApp等,它们能提供详细的崩溃日志、堆栈信息以及用户设备信息,有助于更准确地定位和修复问题。 总结来说,监测iOS应用的崩溃次数是通过记录应用...

    android crash后重启界面

    2. **启动新的进程**:创建一个新的进程,让应用在新的进程中启动,达到类似重启的效果。但这并不保证所有状态都会重置。 3. **使用Intent**:启动应用的主Activity,配合清除任务栈(FLAG_ACTIVITY_NEW_TASK 和 ...

    CrashCatched.zip

    通过集成如Crashlytics、Fabric或Firebase等第三方服务,可以自动收集这些日志并在后台分析,帮助开发者识别常见崩溃模式并优先解决。 为了处理iOS中的内存问题,了解`autoreleasepool`和内存管理规则也很重要。...

    App崩溃日志保存在本地或者上传到服务器

    5. **异常处理框架**:例如`ACRA`(Android)和`Fabric/Crashlytics`(iOS/Android),这些框架能自动捕获应用崩溃,并生成详细的报告,包括设备信息、操作系统版本、崩溃堆栈跟踪等,便于开发者定位问题。 6. **日志...

    Cockroach-X.zip

    在Android应用开发中,遇到bug或异常导致的程序崩溃是一个常见的问题,这会严重影响用户体验。为了提高应用的稳定性和可靠性,开发者通常会采用各种技术手段来预防和处理这些崩溃。"Cockroach-X.zip"提供的就是一个...

    android全局异常处理

    总结起来,"android全局异常处理"的核心在于创建自定义的`Thread.UncaughtExceptionHandler`,并在应用启动时设置为全局处理器,确保所有未被捕获的异常都能得到适当的处理。同时,结合第三方崩溃报告服务可以进一步...

    android acra

    ACRA库提供了多种发送策略,如立即发送、后台发送或在下次启动时发送。 4. **用户交互**: 用户可以选择是否发送崩溃报告,以及是否提供附加反馈信息。 ### 四、ACRA的高级特性 1. **非致命报告**: 除了崩溃报告,...

    django-up:使用gunicorn部署项目的Django应用

    它设计简洁,性能强大,支持多进程模型,能有效地处理高并发请求,常用于生产环境中的Django应用部署。 3. 部署流程:部署Django项目通常涉及以下步骤: - 安装依赖:确保Python环境已经安装了Django、gunicorn和...

    android demo,异常捕获或自动重启app的源代码实现。

    首先,异常捕获主要是为了防止程序因未预期的错误而崩溃。在Android中,我们可以使用`try-catch`语句块来捕获和处理异常。当发生异常时,`try`块中的代码会被执行,如果出现异常,控制权会立即转移到对应的`catch`块...

    一款可以在线拍照的小工具

    标题中的“一款可以在线拍照的小工具”指的是一个利用网络技术实现的在线摄影应用程序。这个工具允许用户通过浏览器或者Web界面进行拍照,打破了传统意义上需要安装本地相机应用的限制,为用户提供了一个便捷、跨...

    Windows Azure Platform

    Windows Azure 平台是微软公司推出的云计算服务平台,它为企业和个人开发者提供了一整套构建、部署和管理应用程序和服务的工具和基础设施。这个平台的核心是Azure云操作系统,它支持多种编程语言和开发工具,如.NET...

    Android实现捕获未知异常并提交给服务器的方法

    在标题和描述中提到的“Android实现捕获未知异常并提交给服务器的方法”是针对那些无法预见的异常,通过自定义异常处理器来捕获并上报,以便开发者能及时发现和修复问题。 首先,我们需要创建一个类并实现`...

Global site tag (gtag.js) - Google Analytics