Apollo 启动脚本解析
Apollo 启动脚本解析
sudo service docker start -- 是在ubuntu14.04中打开
在dev_start.sh脚本中会调用restart_map_volume.sh脚本
dev_start.sh中的脚本解析
- dirname命令解析:
- dirname命令去除文件名中的非目录部分,仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个/及其后面的字符,删除其他部分,并写结果到标准输出。
- dirname /a/b/的结果为:/a
- DIR="\(( cd "\)( dirname "${BASH_SOURCE[0]}" )" && pwd )"详解;
- \({BASH_SOURCE[0]}表示bash脚本的第一个参数(如果第一个参数是bash,表明这是要执行bash脚本,这时"\){BASH_SOURCE[0]}"自动转换为第二个参数);
- ${BASH_SOURCE[0]} 表示
bash docker/scripts/dev_start.sh中的docker/scripts/dev_start.sh部分; cd "$( dirname "${BASH_SOURCE[0]}" )表示切换到执行目录;- pwd是获取当前目录;
APOLLO_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../.." && pwd )"表示APOLLO的根目录,这样的话不管是这么执行的都可以得到根目录。
- Linux shell脚本的if条件判断语句:
- 基本语法:
if[command]; then
符合该条件执行的语句
fi
- [ ]表示条件测试(中括号两边一定要有空格);
- if判断中对于变量的处理,需要加引号,以免一些不必要的错误;
- 如果只单独使用>或者<号,系统会认为是输出或者输入重定向;
- 运行if语句中的命令所产生的错误信息仍然出现在脚本的输出结果中;
- 使用-z或者-n来检查长度的时候,没有定义的变量也为0;
- 空变量和没有初始化的变量可能会对shell脚本测试产生灾难性的影响,因此在不确定变量的内容的时候,在测试号前使用-n或者-z测试一下;
- ? 变量包含了之前执行命令的退出状态(最近完成的前台进程)(可以用于检测退出状态);
[ INT1 -eq INT2 ] INT1和INT2两数相等返回为真 ,=
[ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<>
[ INT1 -gt INT2 ] INT1大于INT2返回为真 ,> # greater than
[ INT1 -ge INT2 ] INT1大于等于INT2返回为真,>= # greater equal
[ INT1 -lt INT2 ] INT1小于INT2返回为真 ,< # less than
[ INT1 -le INT2 ] INT1小于等于INT2返回为真,<=
- ln命令:
- ln的功能是为某一个文件在另外一个位置建立一个同步的链接,当我们需要在不同的目录,用到相同的文件时,使用软链接ln命令就可以了,而且不会占用重复的磁盘空间。
- 硬链接(hard link)与软链接(symbolic link):
- 硬链接的意思是一个档案可以有多个名称;
- 软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。
- 硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。
- 软链接: 软链接是以路径的形式存在,类似Windows下面的快捷方式;软链接可以跨文件系统,硬链接不可以,软链接可以对一个不存在的文件名进行链接;软链接可以对目录进行链接;
- 硬链接: 硬链接以文本副本的形式存在,但不占用实际空间,不允许给目录创建硬链接;硬链接只有在同一个文件系统中才能被创建。
- ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化; ln的链接又分软链接和硬链接两种,软链接就是ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接 ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
ln [参数][源文件或目录][目标文件或目录]
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程
- 什么是coredump:
- 程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件。
- core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等。
- 可以理解为是程序工作当前状态存储生成第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。
- coredump文件的存储位置: core文件默认的存储位置与对应的可执行程序在同一目录下,文件名是core, 通过
cat /proc/sys/kernel/core_pattern查看core文件存在的位置。
- tee命令解析: 重定向输出到多个文件。
- tee file:输出到标准输出的同时,保存到文件file中。如果文件不存在,则创建;如果已经存在,则覆盖之。
- tee -a file: 输出到标准输出的同时,追加到文件file中。如果文件不存在,则创建;如果已经存在,就在末尾追加内容,而不是覆盖。
- tee -: 输出到标准输出两次。
- tee file1 file2 -: 输出到标准输出两次,同时保存到file1和file2中。
- source 命令:
- source FileName: 在当前bash环境下读取并执行FileName中的命令; 该命令通常用命令“.”来替代。
- 这两个命令都以一个脚本为参数,该脚本将作为当前shell的环境执行,即不会启动一个新的子进程。所有在脚本中设置的变量将成为当前Shell的一部分。
- source filename 与 sh filename 及./filename执行脚本的区别:
- 当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别的。./filename是因为当前目录没有在PATH中,所有”.”是用来表示当前目录的。
- sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell。
- source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
- bash的while循环。
while 条件
do
循环体
done
- Shell case语句用法小结。
- shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本),在while中循环查找命令行参数。
- docker镜像的介绍。
- docker pull:从 docker registry 拉去镜像;
for map_name in ${DEFAULT_MAPS[@]};可以遍历shell数组中所有的元素。- shell脚本中,单括号与双括号的区别。
- 单括号
[是shell的内置命令, 而[[是shell的关键字。 - 在[[中使用&&和||表示逻辑与和逻辑或。
- [[支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。
- 单括号
- dev_start.sh脚本就是设置Apollo的一个Docker环境。
rosbag_helper.py脚本相关
- python中
if __name__ == "__main__":的理解:- if name == 'main'的意思是:当.py文件被直接运行时,if name == 'main'之下的代码块将被运行;当.py文件以模块形式被导入时,if name == 'main'之下的代码块不被运行。
- __name__是内置变量,可用于反映一个包的结构。
- __main__文件。
release_into.sh相关
- release_into.sh的内容很少:
xhost +local:root 1>/dev/null 2>&1 #关闭访问控制权, 标准输出重定向到空设备, 标准错误也重定向到标准输出
docker exec \ # 运行Apollo_release的版本
-u $USER \ # -u,用户名或UID
-it apollo_release \ # -i :即使没有附加也保持STDIN 打开, -t :分配一个伪终端
/bin/bash
xhost -local:root 1>/dev/null 2>&1 # 打开访问控制权
- xhost命令;
- xhost +:关闭访问控制,允许任何主机访问本地的X服务器;
- xhost -:打开访问控制,仅允许授权清单中的主机访问本地的X服务器。
- docker exec执行多个命令详解。
Apollo 启动脚本解析的更多相关文章
- init进程 && 解析Android启动脚本init.rc && 修改它使不启动android && init.rc中启动一个sh文件
Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径:system/core/init,编译 ...
- [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat
概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...
- 大数据时代之hadoop(二):hadoop脚本解析
“兵马未动,粮草先行”,要想深入的了解hadoop,我觉得启动或停止hadoop的脚本是必须要先了解的.说到底,hadoop就是一个分布式存储和计算框架,但是这个分布式环境是如何启动,管理的呢,我就带 ...
- 老李推荐:第5章3节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动脚本
老李推荐:第5章3节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 启动脚本 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性 ...
- centos LNMP第一部分环境搭建 LAMP LNMP安装先后顺序 php安装 安装nginx 编写nginx启动脚本 懒汉模式 mv /usr/php/{p.conf.default,p.conf} php运行方式SAPI介绍 第二十三节课
centos LNMP第一部分环境搭建 LAMP安装先后顺序 LNMP安装先后顺序 php安装 安装nginx 编写nginx启动脚本 懒汉模式 mv /usr/local/php/{ ...
- Redis 3 在CentOS 6.5上安装笔记,含启动脚本
Redis的强大就不多说了,直接上菜. 第1步:下载.编译.安装 cd /opt wget http://download.redis.io/releases/redis-3.0.5.tar.gz . ...
- android init进程分析 init脚本解析和处理
(懒人近期想起我还有csdn好久没打理了.这个android init躺在我的草稿箱中快5年了.略微改改发出来吧) RC文件格式 rc文件是linux中常见的启动载入阶段运行的文件.rc是run co ...
- (转)springboot应用启动原理(一) 将启动脚本嵌入jar
转:https://segmentfault.com/a/1190000013489340 Spring Boot Takes an opinionated view of building prod ...
- logstash服务启动脚本
logstash服务启动脚本 最近在弄ELK,发现logstash没有sysv类型的服务启动脚本,于是按照网上一个老外提供的模板自己进行修改 #添加用户 useradd logstash -M -s ...
随机推荐
- Hadoop记录-监控几个思路
1.存活监控 基本监控,主要对进程的存活.端口连通性.url可检测性等指标进行监控. 2.2 可用性监控 主要指对用户而言是否可用,能否返回预期结果,通常部署在一些业务主流程或一些关键环节,如接口调用 ...
- nginx 前端POST请求405问题解决与排查过程
问题描述 在请求时,f12提示POST请求报错405 环境描述 nginx转发至后端nginx,后端nginx转发至后端golang api接口 解决步骤 根据网上方法排查,发现80%以上无非就是以下 ...
- jQuery使用(八):运动方法
show().hide().toggle() 参数:null或(duration,easing,callblack) fadeIn().fadeout().fadeToggle().fadeTo() ...
- java基础之反射---重要
java反射: 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)): 1:获取Class字节码文件对象的三种方式: /** ...
- 解析ArcGis的字段计算器(三)——文本型字段计算,编号那些事儿
实际操作中我们一般会将编号字段定义为文本型,因为编号不是序号,序号是一个递增数值,而编号往往是一个数字串代码. 本篇无说明的均使用VBScript语句1.怎么编号?最简单的编号—>直接在编号字段 ...
- GIT与SVN的比较
Git: 1. 分布式版本控制2. 不需要网络,本地就可以操作版本控制3. 可以是公用的,可以分享4. 不依赖于中央服务器,即使服务器有问题也不会有影响5. 传输方式不一样,git要比svn快很多6. ...
- vue中slot插槽
插槽就是vue实现的一套内容分发的API,将插槽元素作为承载分发内容的出口. 也就是说在组件模板中默认占用一个位置,当使用组件标签时候,组件标签的内容就会自动替换掉内容 slot中可以设置一些默认的内 ...
- 混合app开发--js和webview之间的交互总结
使用场景:原生APP内嵌套H5页面,app使用的是webview框架进行嵌套 这样就存在两种情况 1.原生app调用H5的方法 2.H5调用app的方法 分别讲解下,其实app与H5之间的交互式非常简 ...
- 细说tomcat之集群session共享方案
1. Tomcat Cluster官网:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.htmlTomcat原生支持的集群方案,通过组播消息 ...
- GeoGlobe Server使用问题收集
本人在做数字县区过程中,需要吉奥GeoGlobe Server发布数据,期间遇到些平台问题.故立此帖,作为参考. 1 字段限制: GeoGlobe 5.2部署在我的服务器Windows Server ...