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 # 打开访问控制权

Apollo 启动脚本解析的更多相关文章

  1. init进程 && 解析Android启动脚本init.rc && 修改它使不启动android && init.rc中启动一个sh文件

    Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径:system/core/init,编译 ...

  2. [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat

    概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...

  3. 大数据时代之hadoop(二):hadoop脚本解析

    “兵马未动,粮草先行”,要想深入的了解hadoop,我觉得启动或停止hadoop的脚本是必须要先了解的.说到底,hadoop就是一个分布式存储和计算框架,但是这个分布式环境是如何启动,管理的呢,我就带 ...

  4. 老李推荐:第5章3节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动脚本

    老李推荐:第5章3节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 启动脚本   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性 ...

  5. 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/{ ...

  6. Redis 3 在CentOS 6.5上安装笔记,含启动脚本

    Redis的强大就不多说了,直接上菜. 第1步:下载.编译.安装 cd /opt wget http://download.redis.io/releases/redis-3.0.5.tar.gz . ...

  7. android init进程分析 init脚本解析和处理

    (懒人近期想起我还有csdn好久没打理了.这个android init躺在我的草稿箱中快5年了.略微改改发出来吧) RC文件格式 rc文件是linux中常见的启动载入阶段运行的文件.rc是run co ...

  8. (转)springboot应用启动原理(一) 将启动脚本嵌入jar

    转:https://segmentfault.com/a/1190000013489340 Spring Boot Takes an opinionated view of building prod ...

  9. logstash服务启动脚本

    logstash服务启动脚本 最近在弄ELK,发现logstash没有sysv类型的服务启动脚本,于是按照网上一个老外提供的模板自己进行修改 #添加用户 useradd logstash -M -s ...

随机推荐

  1. Kafka技术内幕 读书笔记之(四) 新消费者——消费者提交偏移量

    消费组发生再平衡时分区会被分配给新的消费者,为了保证新消费者能够从分区的上一次消费位置继续拉取并处理消息,每个消费者需要将分区的消费进度,定时地同步给消费组对应的协调者节点 .新AP I为客户端提供了 ...

  2. bzoj千题计划312:bzoj2119: 股市的预测(后缀数组+st表)

    https://www.lydsy.com/JudgeOnline/problem.php?id=2119 题意:将给定数组差分后,求ABA形式的字串个数,要求|B|=m,|A|>0 1.后缀数 ...

  3. vue filter过滤器简单应用

    vue中过滤器,用于一些常见的文本格式化,用 | 来操作. 过滤器可以用在两个地方: 1.在{{}}双花括号中插入值 2.v-bind表达式中使用 <!-- 在双花括号中 --> {{ m ...

  4. python3 bytes数据类型探讨

    python3中str和bytes分开了,那么bytes与str之间到底是什么关系呢?下面从表现形式.处理方式.存储形式三个方面来阐述其区别 1. 在字符串前面加上b,就表示bytes数据类型 s1 ...

  5. C#中属性的使用——主动调用才发挥作用

    微软对属性定义如下: “属性是这样的成员:它提供灵活的机制来读取.编写或计算某个私有字段的值. 可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法. 这使得可以轻松访问数据,此 ...

  6. Java入门系列 Java 中的四种引用

    Why java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象. java对象的引用包括强引用,软引用,弱引用,虚引用 Java中提供这四种引用类型 ...

  7. TCP简单回射程序

    一.程序功能 (1)客户从标准输入读入一行文本行,并写给服务器: (2)服务器从网络输入读入这行文本,并回射给客户: (3)客户从网络输入读入这行回射文本,并显示在标准输出上 二.服务器程序 #inc ...

  8. linux 操作 json文件

    Linux 下 操作 json 文件神器 jq.  jq yum install jq -y 查看一个 file.json 文件 # jq . file.json JSON (JavaScript O ...

  9. cocos2dx 屏幕分辨率

    http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework ...

  10. Hadoop之HDFS思维导图