Cloud Foundry vcap_dev start过程分析

SAP HANA XS advanced中JavaScript单元测试实战:Jasmine与XSUnit集成指南 单元测试是保障软件质量、提升开发效率的核心工程实践,通过隔离测试单个代码单元来验证其行为是否符合预期。其原理在于模拟依赖、断言结果,确保代码修改不会破坏既有功能。在JavaScript生态中,Jasmine作为流行的行为驱动开发(BDD)测试框架,提供了清晰的语法结构。对于SAP HANA XS advanced这类企业级云应用平台,其特有的XSUnit测试运行器,为在Cloud Foundry环境中执行测试提供了原生支持。本文聚焦于如何在SAP Business Application Studio开发环 阅读详情

我们会通过bin/vcap_dev start命令来启动所有的cf组件,当然,也可以指定某些组件,比如bin/vcap_dev start health_manager。

下面大致研究下流程。

1. vcap_dev文件

首先是vcap_dev文件,前面主要处理了命令参数以及路径等问题。最后可以看到

exec_cmd("#{ruby_binary} #{vcap_launch} #{command} #{vcap_components["components"].join(" ")} -c #{deployment_config_path} -v #{vcap_path} -l #{deployment_info["deployment_log_path"]}")

exec_cmd意思就是执行cmd,而ruby_binary是ruby,vcap_launch就是和vcap_dev同位置的vcap文件,后面的command就是我们的启动指令start,当然可能是stop,restart之类的。

2. vcap文件

所以我们就可以跑去vcap文件看个究竟了。

因为本文研究start,所以直接看vcap文件的start函数:

  def start
    if !running?

      pid = fork do
        # Capture STDOUT when no log file is configured
        if !log_file?
          stdout = File.open(log_file, 'a')
          stdout.truncate(0)
          STDOUT.reopen(stdout)
          stderr = File.open(log_file, 'a')
          STDERR.reopen(stderr)
        end
        # Make sure db is setup, this is slow and we should make it faster, but
        # should help for now.
        if is_cloud_controller?
          cc_dir = File.expand_path(File.join(DIR, '..', 'cloud_controller'))
          Dir.chdir(cc_dir) { `bundle exec rake db:migrate` }
        end
        exec("#{component_start_path}")
      end

      Process.detach(pid)

      start = Time.now
      while ((Time.now - start) < 20)
        break if running?
        sleep (0.25)
      end
    end

    status

    if !running?
      if File.exists?(log_file)
        log = File.read(log_file)
        STDERR.puts "LOG:\n #{log}" if !log.empty?
      end
    end
  end
其他的不理会,重点语句是exec("#{component_start_path}"),当然cc还需要做一个db migrate。那么我们看component_start_path,这也是个函数。这个函数所做的事情就是跑去vcap的相应目录下面,然后执行bin目录下的同名文件。以health manager为例,它执行vcap/bin/health_manager文件,同时以-c传入.deployment/devbox/config下面的health_manager.yml文件。那么vcap_dev start任务就交接完成了,接下来由bin下面的脚本执行了。

这里的vcap路径下有bin目录,而vcap/health manager下面也有bin,vcap脚本调用的是vcap下的bin。之前搞错了。那么看health manager的bin脚本:

exec(File.expand_path("../../health_manager/bin/health_manager", __FILE__), *ARGV)

他就直接调用vcap/health_manager/bin/health_manager脚本了

3. bin脚本

然后我们看看bin下面的脚本都在做什么:

home = File.join(File.dirname(__FILE__), '/..')
ENV['BUNDLE_GEMFILE'] = "#{home}/Gemfile"
require File.join(home, 'lib/health_manager')
很简单,就是设置了bundle gemfile的环境变量,然后指向lib下的health_manager文件。Lib下的health_manager.rb主要有三个部分,第一个部分是module CloudController,用来添加非常多的依赖(require),目前不清楚这么做的意义。第二部分是HealthManager类,那就不提了。重要的是第三部分,也就是文档末尾的一些代码:

if $0 == __FILE__ || File.expand_path($0) == File.expand_path(File.join(File.dirname(__FILE__), '../bin/health_manager'))

  config_path = ENV["CLOUD_FOUNDRY_CONFIG_PATH"] || File.join(File.dirname(__FILE__), '../config')
  config_file = File.join(config_path, "health_manager.yml")
  options = OptionParser.new do |opts|
    opts.banner = 'Usage: healthmanager [OPTIONS]'
    opts.on("-c", "--config [ARG]", "Configuration File") do |opt|
      config_file = opt
    end
    opts.on("-h", "--help", "Help") do
      puts opts
      exit
    end
  end
  options.parse!(ARGV.dup)

  begin
    config = YAML.load_file(config_file)
  rescue => e
    $stderr.puts "Could not read configuration file:  #{e}"
    exit 1
  end

  EM.epoll

  EM.run { HealthManager.start(config) }
end

首先去读config file,然后解析了options参数,我们知道bin脚本已经传入了-c参数,所以在options解析中,config会覆盖掉。在读取config之后,就使用Event Machine启动HealthManager了。EM.epoll是一个linux下的调用命令,对我们没有意义。EM.run就是我们要看的,可以看到这里只调用了HealthManager.start函数。后面就不再深入了,大致的流程就是完成配置,然后开启NATS,订阅NATS事件,然后发送NATS消息。

总结一下:vcap_dev和vcap脚本都用来处理安装之后的启动停止等任务,他们会调用vcap/bin目录下对应的脚本,而这些脚本又会去相应组件的目录下执行更为详细的任务

手把手教你用Python实现双三次插值(附OpenCV对比测试) 本文深入解析了双三次插值算法的数学原理,并提供了从零开始的Python实现教程。通过与OpenCV官方实现的对比测试,详细评估了不同插值算法(包括最邻近差值、双线性插值)在图像质量与计算性能上的差异,帮助开发者掌握高质量图像缩放的核心技术。 阅读详情

相关推荐

【SLAM论文笔记】SplaTAM论文小结

参考方法有ORB-SLAM3、Point-SLAM、NICE-SLAM、Kintinuous、ElasticFusion,测试数据集有ScanNet++、Replica、TUM-RGBD、Orig-ScanNet,SpaTAM并未在全部对比均为第一,表现最佳的是在ScanNet++、Replica,ScanNet++上SplaTAM方法位姿精度比第2名ORB-SLAM3高两个数量级,在TUM。上无稀疏SLAM结果,NICE-SLAM与Point-SLAM占优。SplaTAM基本做到了SOTA。

持之以恒 1010

私有化部署Git管理平台DevStar

安装 Git Windows 1. 下载 Git for Windows: [https://git-scm.com/download/win](https://git-scm.com/download/win) 2. 运行安装程序,按提示完成安装。 macOS使用 Homebrew 安装: brew install git 配置 Git git config --global user.name "Your Name" git config --global user.email "your.emai

qq_53199343的博客 642

用逻辑分析仪实测EM4095:125kHz RFID耳标解码的电压与脉宽玄学

本文通过逻辑分析仪实测EM4095芯片,深入解析125kHz RFID耳标解码中的电压与脉宽关联现象。揭示了供电电压对曼彻斯特编码脉宽的影响规律,并提供了一套可落地的调试方法论,包括信号链路解析、逻辑分析仪配置技巧及系统级稳定性提升方案,帮助开发者解决解码不稳定问题。

weixin_30629653的博客 328

NVME driver分析之nvme_dev_start函数分析

3.1 nvme_dev_start函数分析 3.1.1 nvme_dev_map@nvme_dev_start函数分析 ①pci_enable_device_mem(pdev)//为user初始化pci device的memory space ②dev->entry[0].vector = pdev->irq;//给中断向量赋值 ③pci_set_master(p

LDD施工队 5885

NPP/VIIRS夜间灯光数据:从下载到应用的完整指南

本文提供了NPP/VIIRS夜间灯光数据从下载、处理到应用的完整实战指南。详细介绍了如何从官方源获取数据、解读文件结构、进行坐标校正与数据清洗,并深入探讨了其在城市扩张监测、社会经济指标估算、重大事件影响评估等领域的核心应用。文章旨在帮助研究者与从业者快速掌握这一强大的空间数据,将其转化为研究中的实用工具。

gpu4optimizer的博客 864

Python+OpenCV实战:5分钟搞定机械臂手眼标定(眼在手上模式)

本文详细介绍了使用Python和OpenCV在5分钟内完成机械臂手眼标定(眼在手上模式)的实战教程。通过解析相机坐标系与机械臂基坐标系的转换关系,提供从数据采集到标定矩阵计算的全流程代码实现,帮助开发者快速解决AX=XB问题,提升机械臂视觉引导精度。

weixin_33670786的博客 498

npm run start 与 npm run dev的区别?

1-具体看你package.json 2-start和dev都是脚本 start执行的就是dev的脚本 - - > 最终目的是执行dev后面的

404路西法的博客 2万+

竞拍算法(Auction Algorithm)原理及工作过程分析

因一些项目工作需要对竞拍算法进行深入了解。但百度了大部分资料都未找到一篇文章能对此算法进行较为深入的介绍。在一番努力之下,终于找打了最初提出该算法的论文,本文内容主要结合该论文对竞拍算法进行分析。 竞拍算法简介 竞拍算法(Auction Algorithm)是一种用于解决分配问题的分布式算法,经相关文献查询,最早由麻省理工学院信息和决策系统实验室的Bertsekas(教授?)提出 1,于1988年发表于期刊Annals of Operations Research。 顾名思义,竞拍算法本质就是模拟人类拍.

weixin_47546390的博客 3万+

Iron Foundry和Cloud Foundry的vcap对比

前一阶段,在做Iron Foundry和Cloud Foundry的实验室工作,在成功完成Iron Foundry和Cloud Foundry的通信以后,特意去深入了解Iron Foundry和Cloud Foundry的源码区别。 于是在github官网将Cloud Foundry的vcap和Iron Foundry的vcap的源码做了一回对比。 由于对比程度比较浅层次,所以肯定会有疏漏...

星.云计算 291

AMBA-ATB spec

AMBA-ATB spec 1. ATB总线的用途及版本 1.1 ATB总线用途 一般来说,ATB(Advanced Trace Bus)总线用来在ARM的coresight组件之间传递trace数据。如下图所示: 1.2 ATB总线的版本 ATB(Advanced Trace Bus)共有两个版本,其中v1.0作为AMBA3的一部分,于2006年发布的,而v1.1则是2012年随着AMBA4发布的。ATB规范新增了数据(主要针对trace data)不可知的接口,以便在跟踪系统中根据 AMBA 规范跟

weixin_43781229的博客 7348

作物生长模型Oryza V3实战1:为什么要研究它

ORYZAV3是水稻生长模拟模型ORYZA2000的最新升级版本(3.5版),作为作物生长模型,它通过数学方法和计算机技术模拟水稻生长发育过程及其与环境条件的相互作用。主要功能包括:模拟不同条件下的水稻生长和产量形成、评估环境胁迫影响、分析土壤碳氮动态以及进行区域尺度模拟。国内应用广泛,科研机构用于气候变化影响评估、灌溉模式比较等研究,并开展参数敏感性分析和应用培训。使用流程分为六个步骤:确定输入参数(气象、土壤、作物三类)、参数校准、设置模拟环境、运行模型、分析结果(输出50个参数)和计算产量(穗干重×收

504

Cloud foundry基础

Cloud Foundry 组件概述路由Router认证OAuth2 Server UAA 和 Login Server应用生命周期Cloud Controller 和 Diego BrainnsyncBBS 和 Cell Reps应用存储和执行BlobstoreDiego Cell服务Service Brokers通信Consul 和 BBS指标和日志LoggregatorMetrics Col...

赵英超的博客 7693

超十万字解读Spring AI实战:开篇

大模型技术正以惊人的速度改变世界,2025年的人工智能已不再是科幻,而是现实。大模型如ChatGPT等,正在重塑各行各业,降低技术门槛,使专业能力普及化。SpringAI的出现为Java开发者提供了桥梁,使其能在企业级系统中稳定运行AI,同时保持工程化思维。尽管SpringAI在生态、学习成本和性能上存在不足,但其企业级基因和国产化适配能力使其成为Java开发者的重要工具。本系列文章旨在介绍SpringAI的功能与特性,鼓励更多Java开发者参与AI实践,共同探索AI时代的无限可能。

liaokailin的专栏 1577

开发者的福利:Cloud Foundry

Cloud Foundry是一个流行的开源平台即服务(PaaS)。Cloud Foundry可以在您自己的部署基础架构上使用,也可以在腾讯云 Web服务,VMware或vSphere等任何IaaS(Infrastructure as a Service)上使用 。它可以使用BOSH部署系统进行部署 。Cloud Foundry提供了一个可轻松运行,扩展和维护应用程序的环境。Cloud Foundr...

5473

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

用vcap部署cloudfoundry私有云

[color=indigo] 研究cloudfoundry已经有一段时间了,在前期部署上确实遇到了很多问题,也走了很多弯路,现在就总结一下: 首先说的是,cloudfoundry现在还处于bete版本,主要依托于github上的资源。因为环境原因没有选择bosh部署,此片文档是针对vcap部署进行的说明,所以CF版本也就是v1.0版。终端接口用的vmc,(貌似v2.0才能使用cf ...

fainily的博客 449

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

CloudFoundry源码分析:vcap-tool

概述vcap-tool,顾名思义,是vcap平台的一个工具。这个工具将vcap平台的运行数据整合进OpenTSDB。OpenTSDB是一个基于HBase的、分布式的、可扩展的Time Series Database (TSDB)。OpenTSDB was written to address a common need: store, index and serve metrics collect

Tony的专栏 1544

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

CloudFoundry的状态监控:varz

CF的组建其实都有自己的状态监控,我们可以通过http查看他们的状态。这个就是varz。 比如我们在dea.yml配置文件中加入: status: port: 2222 user: user password: pw 然后http访问http://本机的ip:2222/varz,那个ip不能是localhost或者127.0.0.1,必须是对外的ip。然后就会有验证信息,输入上面

cherry_sun的专栏 1万+

cloudfoundry dev setup 分析以及chef学习

cf通过chef可以部署单节点实例。只需要按照http://support.cloudfoundry.com/entries/20407923-single-multi-node-vcap-deployment-using-dev-setup的介绍即可安装。本文就尝试着分析一下整个部署的流程,同时也对chef进行一些学习。 vcap_dev_setup 好了,首先从最外部的脚本进入,就是bin

cherry_sun的专栏 7918

CloudFoundry DEA运作源码分析

这篇文章结构比较糟,我在http://lory-yang.com/2012/09/09/cloud-foundry-dea/中做了一些改进,可以去那里看看。另外我的博客整体搬迁到独立地址了:lory-yang.com,欢迎大家来访问 本文是对Cloud Foundry中的DEA组件源码的一些分析。有点流水帐的感觉,就事论事吧,同时因为本人能力有限,而且研究不深,错误在所难免。诸位就随便看看,

cherry_sun的专栏 5998

cloud controller 源码分析(包括Ruby on Rails项目结构分析)

本文记叙我作为一个完全不懂ror(ruby on rails)的开发者,了解ror以及cc所需的知识。全文包括了cloud controller的代码结构,MVC架构分析,最后有一个例子帮助分析。 目录结构 cc是一个ror项目,所以是按照ror的目录结构来安排的,如下所示。 app:是web应用的主程序目录,包含了mvc组件的代码config:runtime rules,r

cherry_sun的专栏 5387

关于cloud_foundry自己的ruby, gem, bundle

很早就大致了解cloud_foundry有自己的ruby,而不是使用系统提供的ruby。并且还有两个版本的ruby,今天终于遇到了,大致搞清楚了。 他们在哪里 首先我们要知道cloud_foundry把自己的ruby,gem装到哪里去了,这个可以去看config目录下面的deployment_info.conf文件。里面包含了一个ruby_bin_dir变量。这个路径就是ruby所在,在本机上

cherry_sun的专栏 5081

VMC源码的简单分析

简单看了下VMC的源码,写一个类似提纲的东西。文章里面主要包括VMC各个代码块和他们实现的功能,通过一个命令的实现流程来分析。 VMC执行一条命令的流程: 1. bin/vmc vmc是一个gem包,所以我们可以在自己的gem文件夹下面找到他们,执行vmc命令其实就是运行bin目录下的vmc文件。这个文件很简单,首先require lib/cli.rb,然后调用VMC::Cli:

cherry_sun的专栏 4457

Cloud Foundry新版router源码分析

调整格式太费力了,这里直接粘帖过来了,原文我写在自己的博客上了:http://lory-yang.com/2012/08/06/cloud_foundry_router/。 Cloud Foundry在几个月前改进了它的router,我们可以在新版cloudfoundry解密中看到它的介绍: 上个版本中。Router作为一个nginx脚本存在。所以的请求都必须经过Ruby代码,然后

cherry_sun的专栏 4431

cloud foundry 默认文件路径列表

本文致力于列一份cloudfoundry默认的文件分布路径列表,方便大家查询。 vcap代码:/root/cloudfoundry/vcap config文件:/root/cloudfoundry/.deployments/devbox/config log:/root/cloudfoundry/.deployments/devbox/log 安装的ruby gems(可以去那

cherry_sun的专栏 4354

cloud controller和health_manager can't connection to server when starting

电脑挪了个地方,发现cc和hm启动的时候直接无法连接server了,exception是在postgresql的类当中抛出来的。 经过磊哥的帮忙,发现问题在于postgersql的配置文件出现问题了。在/etc/postgresql/8.4/main/postgresql.conf文件最后,有一个监听ip,localhost似乎完全没有作用,然后因为换了地方,ip变动,所以原来的ip也不对了,因

cherry_sun的专栏 3340

VS Code + KXApp 开发 iOS 报错排查指南,工程、签名、真机、补全、配置

在 VS Code 里用 KXApp 开发 iOS,报错常不在代码而在环境。本文按失败阶段分五类排查:工程没出现 Xcode 视图(查 .xcodeproj 与 xcode-select)、构建失败(No profiles、Team 签名、CocoaPods 用 .xcworkspace)、真机调试失败(信任、开发者模式、设备未准备好)、没补全或 No such module(等索引、清 clangd 冲突)、设置保存不了(装 xcodeproj gem),每类给现象、日志通道和修法。

2501_91590906的博客 200
上一篇: cloudfoundry dev setup 分析以及chef学习
下一篇: Ruby gem install Error(mkmf.rb can't find header files for ruby at...)
Lory_yang
博客等级 码龄18年 48粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值