Jast blog Jast blog
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

Jast-zsh

如果你知道你要去哪里,全世界都会给你让路。
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Ambari自定义服务开发-项目初始化
  • Ambari自定义服务开发-组件安装启动停止卸载介绍
  • Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法
  • Ambari自定义服务开发-自定义服务配置文件生成
  • Ambari自定义服务开发-代码如何获取配置参数
  • Ambari自定义服务开发-修改配置文件提示服务重启
  • Ambari自定义服务开发-自定义告警
  • Ambari自定义服务开发-查看历史版本配置
  • Ambari自定义服务开发-调试方法
  • Ambari自定义服务开发-执行Shell命令
    • Ambari自定义服务开发-快捷访问链接生成
    • Ambari自定义服务开发-服务组件启动顺序设置
    • Ambari自定义服务开发-服务组件安装依赖另外一个组件设置
    • Ambari自定义服务开发-监控指标Metrics介绍
    • Ambari自定义服务开发-使用客户端下载配置文件
    • Ambari自定义服务开发-美化(增强型)配置参数设置
    • Ambari自定义服务开发-自定义开发安装包整合到Ambari-Server中
    • Ambari自定义服务开发-自定义脚本运行
    • Ambari自定义服务开发-常用函数
    • Ambari自定义服务开发问题处理-中文乱码
    • Ambari自定义服务开发问题处理-告警项UNKWN
    • Ambari自定义服务开发问题处理-Agent安装服务报错unknown
    • Ambari自定义服务开发问题处理-修改源码配置,服务重启后未生效
    • 《Ambari自定义开发教程》笔记
    Jast-zsh
    2024-04-08
    目录

    Ambari自定义服务开发-执行Shell命令

    [toc]

    # Execute - 代码中执行Shell命令

    在写自定义服务中可能会用到很多shell命令,如创建目录、下载文件等等;resource_management中有Execute方法,我们可以直接使用,使用方法如下

    from resource_management import *
    
        def install(self, env):
            import params
            env.set_params(params)
    				# 下载Doris安装包
            Execute('wget {0} -O apache-doris-2.0.2-bin-x64.tar.gz'.format(params.doris_download))
    
            # 将安装包解压到指定目录
            Execute('tar -zxvf apache-doris-2.0.2-bin-x64.tar.gz -C /usr/hdp/3.1.5.0-152/')
    
            # 删除下载的安装包
            Execute('rm -rf apache-doris-2.0.2-bin-x64.tar.gz')
    
            # 初始化环境变量
            cmd = format("cd {doris_scripts_dir}; chmod +x ./changeOsConf.sh && sh ./changeOsConf.sh")
            Execute(cmd)
    
            # 创建日志目录
            Execute(format('mkdir -p {LOG_DIR} && chown -R {doris_user}:{user_group} {LOG_DIR}'))
    
            # 将服务目录权限设置为doris
            Execute(format('chown -R {doris_user}:{user_group} {doris_base_dir}'))
    
            # 设置 pid 目录权限
            Execute(format('mkdir -p {doris_pid_dir} &&  chown -R {doris_user}:{user_group} {doris_pid_dir}'))
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

    # 通过format引用配置文件中的变量

    在上面样例代码中我们发现有很多{xxx}的变量,如{doris_user}等,通过format()函数可以自动将{xxx}转换为我们设置的变量值。

    获取的变量在params.py中进行定义,还是拿{doris_user}举例,它获取的就是params.py中doris_user = config['configurations']['doris-env']['doris_user']的值

    tip: 在format中想获取的值,必须在params.py中通过config或者default()取到

    # 常用命令

    # 指定用户执行
    cmd = Execute(format('mkdir -p {doris_pid_dir} &&  chown -R {doris_user}:{user_group} {doris_pid_dir}'))
    # 指定doris_user用户执行命令
    Execute(cmd , user=params.doris_user)
    
    1
    2
    3
    # 执行失败继续执行
    cmd = Execute(format('mkdir -p {doris_pid_dir} &&  chown -R {doris_user}:{user_group} {doris_pid_dir}'))
    # 指定doris_user用户执行命令,ignore_failures=True 的意思就是如果异常跳过该行命令,继续执行
    Execute('cmd', user=params.doris_user, ignore_failures=True)
    
    1
    2
    3

    实际应用验证

    在 install 中添加如下代码

    print("Before Custom Exception")
    Execute('wget', user=params.doris_user,ignore_failures=False)
    print("Custom Exception")
    
    1
    2
    3

    设置 ignore_failures=False(默认就是False),安装时报错提示命令错误

    image-20240222134036001

    在日志中也只能看到Before Custom Exception,说明遇到异常后停止了

    image-20240222135505050

    设置异常跳过再次安装

    print("Before Custom Exception")
    Execute('wget', user=params.doris_user,ignore_failures=True)
    print("Custom Exception")
    
    1
    2
    3

    image-20240222135202172

    # 创建文件夹、文件
            # 1. 创建两个目录,一个目录是通过params.py获取到的目录,另外一个是指定的:/var/run/test目录
            # 2. mode : 目录权限为0755
            # 3. owner:目录所属用户
            # 4. group:目录所属用户组
            # 5. create_parents:父目录如果不存在,是否创建父目录
            Directory([params.doris_pid_dir,'/var/run/test'],
                      mode=0755,
                      cd_access='a',
                      owner=params.doris_user,
                      group=params.user_group,
                      create_parents=True
                      )
    
            # 1. 创建两个目录,一个目录是通过params.py获取到的目录,另外一个是指定的:/var/run/test目录
            # 2. mode :文件权限为0
            # 3. owner:文件所属用户
            # 4. group:文件所属用户组
            # 5. content:文件创建后填写的内容
            File([params.doris_pid_file, '/var/run/test/file.txt'],
                      mode=0644,
                      owner=params.doris_user,
                      group=params.user_group,
                      content='init content'
                      )
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # 删除文件夹、文件
            # 使用用户owner指定的用户删除目录
            Directory(['/var/run/test2', '/var/run/test'],
                      action='delete',
                      owner=params.doris_user
                      )
    
            # 使用用户owner指定的用户删除文件
            File(['/var/run/test/file2.txt', '/var/run/test/file.txt'],
                 action='delete',
                 owner=params.doris_user
                 )
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # subprocess执行shell命令获取返回值

    当我们需要复杂的判断,通过Execute执行无法获取到运行命令的返回值,使用subprocess可以获取返回值

    import subprocess
    
    result = subprocess.check_output(['ls'], stderr=subprocess.STDOUT, shell=True,
                                             universal_newlines=True)
    print(result)
    
    1
    2
    3
    4
    5
    上次更新: 2024/04/08, 10:55:49
    Ambari自定义服务开发-调试方法
    Ambari自定义服务开发-快捷访问链接生成

    ← Ambari自定义服务开发-调试方法 Ambari自定义服务开发-快捷访问链接生成→

    最近更新
    01
    Linux可视化监控
    02-26
    02
    Maven私服搭建
    02-26
    03
    当ElasticSearch时间字段设置多个格式到底是用的哪个?
    01-19
    更多文章>
    Theme by Vdoing | Copyright © 2016-2025 Jast-zsh | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式