在用Fabric启动远程后台进程时,由于自己的后台程序使用类似下面的方式后台运行,导致后台进程不能启动成功
看了一下官方文档,说是有几种方式可以解决这个问题,下面是我使用的方法
首先修改自己的启动后台进程的脚本
2 |
nohup java MyServer &> /dev/null &
|
然后修改fabric脚本,在远程运行时增加pty=False参数,比如
2 |
run( 'execute_my_programe' , pty = False )
|
最近有个需求就是要在一个集群的多个机器上运行一些命令,比如启动、停止服务,运行一些脚本收集一些数据等,于是找到了python的一个框架Fabric。Fabric是一个Python库,用于简化使用SSH的应用程序部署或系统管理任务。
它提供的主要功能包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入、中止执行等。
1. 安装
在我的CentOS上,运行下面的命令就可以简单安装
2 |
yum install fabric.noarch
|
2. 测试脚本
在当前目录下创建fabfile.py文件,fabric默认总是使用fabfile.py作为它的配置文件,当然也可以使用-f来指定使用的配置文件,内容如下:
然后运行”fab hello”,可以得到如下结果
Hello fab!
下面看看参数怎样传递
然后运行”fab hello:name=fab”,可以得到如下结果
Hello fab!
3. 执行本地操作
1 |
from fabric.api import *
|
4. 执行远程操作
1 |
from fabric.api import *
|
2 |
env.hosts = [ 'kongxx@host1:22' , 'kongxx@host2:22' ]
|
其中env.hosts定义了要远程执行的机器列表,env.password是要登录远程机器的密码。
5. 基本命令知道咋用了,下面就看看怎样实现我需要的功能,由于我需要批量在200多台机器上批量启动服务和执行命令,所有这些机器都配置了免密码登录,这样就不需要配置env.password了
5.1 首先准备了一个机器列表文件,比如把所有机器名写在/tmp/hosts文件中,每行一个机器名,类似如下
5.2 fabfile.py文件内容
01 |
from fabric.api import *
|
05 |
f = open ( '/tmp/hosts' , 'r' )
|
06 |
env.hosts = f.readlines()
|
09 |
@parallel (pool_size = 5 )
|
11 |
print ( "start service" )
|
13 |
run( '/etc/init.d/myservice start' )
|
15 |
@parallel (pool_size = 5 )
|
19 |
run( '/etc/init.d/myservice stop' )
|
21 |
@parallel (pool_size = 5 )
|
23 |
print ( "check service status" )
|
25 |
run( '/etc/init.d/myservice status' )
|
这里由于机器比较多,因此使用了“@parallel(pool_size=5)”来使fabric使用并发方式执行,当然也可以使用命令行参数指定使用并发方式“fab -P -z 5 ”。
运行下面命令即可批量执行启动、停止、查询状态操作
1 |
fab set_hosts start|stop|status |
分享到:
相关推荐
在IT行业中,Windows服务是一种特殊类型的后台应用程序,它在没有用户界面的情况下运行,通常用于执行自动任务或提供持续的服务。"Windows Service Demo" 指的可能是一个示例项目,展示了如何在Windows操作系统中...
在Hyperledger Fabric的部署中,可能用到这个库来支持后台守护进程(daemon)的管理,这对于在服务器上运行和管理区块链节点至关重要。 在使用这套组件进行区块链开发时,你需要了解以下知识点: 1. **区块链基础*...
2. **初始化Crashlytics**:在应用的启动代码中调用`Fabric.with([Crashlytics.self])`(Swift)或`[Fabric with:@[[Crashlytics class]]]`(Objective-C)以启动Crashlytics服务。 3. **处理未捕获的异常**:...
或者集成第三方崩溃报告服务如Firebase Crashlytics、Fabric、HockeyApp等,它们能提供详细的崩溃日志、堆栈信息以及用户设备信息,有助于更准确地定位和修复问题。 总结来说,监测iOS应用的崩溃次数是通过记录应用...
2. **启动新的进程**:创建一个新的进程,让应用在新的进程中启动,达到类似重启的效果。但这并不保证所有状态都会重置。 3. **使用Intent**:启动应用的主Activity,配合清除任务栈(FLAG_ACTIVITY_NEW_TASK 和 ...
通过集成如Crashlytics、Fabric或Firebase等第三方服务,可以自动收集这些日志并在后台分析,帮助开发者识别常见崩溃模式并优先解决。 为了处理iOS中的内存问题,了解`autoreleasepool`和内存管理规则也很重要。...
5. **异常处理框架**:例如`ACRA`(Android)和`Fabric/Crashlytics`(iOS/Android),这些框架能自动捕获应用崩溃,并生成详细的报告,包括设备信息、操作系统版本、崩溃堆栈跟踪等,便于开发者定位问题。 6. **日志...
在Android应用开发中,遇到bug或异常导致的程序崩溃是一个常见的问题,这会严重影响用户体验。为了提高应用的稳定性和可靠性,开发者通常会采用各种技术手段来预防和处理这些崩溃。"Cockroach-X.zip"提供的就是一个...
总结起来,"android全局异常处理"的核心在于创建自定义的`Thread.UncaughtExceptionHandler`,并在应用启动时设置为全局处理器,确保所有未被捕获的异常都能得到适当的处理。同时,结合第三方崩溃报告服务可以进一步...
ACRA库提供了多种发送策略,如立即发送、后台发送或在下次启动时发送。 4. **用户交互**: 用户可以选择是否发送崩溃报告,以及是否提供附加反馈信息。 ### 四、ACRA的高级特性 1. **非致命报告**: 除了崩溃报告,...
它设计简洁,性能强大,支持多进程模型,能有效地处理高并发请求,常用于生产环境中的Django应用部署。 3. 部署流程:部署Django项目通常涉及以下步骤: - 安装依赖:确保Python环境已经安装了Django、gunicorn和...
首先,异常捕获主要是为了防止程序因未预期的错误而崩溃。在Android中,我们可以使用`try-catch`语句块来捕获和处理异常。当发生异常时,`try`块中的代码会被执行,如果出现异常,控制权会立即转移到对应的`catch`块...
标题中的“一款可以在线拍照的小工具”指的是一个利用网络技术实现的在线摄影应用程序。这个工具允许用户通过浏览器或者Web界面进行拍照,打破了传统意义上需要安装本地相机应用的限制,为用户提供了一个便捷、跨...
Windows Azure 平台是微软公司推出的云计算服务平台,它为企业和个人开发者提供了一整套构建、部署和管理应用程序和服务的工具和基础设施。这个平台的核心是Azure云操作系统,它支持多种编程语言和开发工具,如.NET...
在标题和描述中提到的“Android实现捕获未知异常并提交给服务器的方法”是针对那些无法预见的异常,通过自定义异常处理器来捕获并上报,以便开发者能及时发现和修复问题。 首先,我们需要创建一个类并实现`...