4. shell编程接口

4.1 模块脚本编写规范

4.2 标准输入输出接口

4.3 文件交换接口规范

4.4 时间戳与性能统计

模块内脚本通常以shell实现。要使用内置函数,容器内需安装jq以支持json解析。

以下是debian/ubuntu类镜像的Dockerfile中,安装jq的示例代码:

RUN apt update \
    && apt-get install -y jq \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

4.5 常用scalebox内置函数

4.5.1 scalebox::json_val

功能:从json中提取参数值 参数列表: json文本 json字段名 返回:json字段值(字符串)

4.5.2 scalebox::task_header

功能:从json中提取消息头的值,若不存在,则从环境变量中提取值(环境变量名为消息头对应的全大写字母) 参数列表: json文本 json字段名:以消息字母、下划线定义 返回:参数值(字符串)

4.5.3 scalebox::json_parse

功能:将json字符串映射为hash table 参数列表: json文本 bash的hashtable:返回值 返回:无

4.5.4 path::host_path

参数:容器内dir名 返回:容器可访问的主机目录

4.5.5 path::size

参数:容器可访问的主机目录 返回:该目录字节数

4.6 内置函数的用法示例

#!/usr/bin/env bash

source /usr/local/lib/scalebox/functions.sh

my_header=$(scalebox::task_header "$2" "my_header")

path_in_container="mypath"
host_dir=$(path::host_path ${path_in_container})

4.7 容器内可访问的数据目录

容器内缺省可访问外部目录包括:

  • /tmp:本地临时文件目录

  • /dev/shm:本地缓存目录(tmpfs)

  • /cluster_data_root:集群数据根目录(在集群定义中,用data_root定义)

  • /local_data_root:计算节点本地根目录

要访问其它目录,需要在模块定义的volumes中定义映射关系。