更新时间:2026-10-30 GMT+08:00
分享

Shell

功能

通过Shell节点执行用户指定的Shell脚本。

Shell节点的后续节点可以通过EL表达式#{Job.getNodeOutput()},获取Shell脚本最后4000字符的标准输出。

使用示例:

获取某个Shell脚本(脚本名称为shell_job1)输出值包含“<name>jack<name1>”的内容,EL表达式如下所示:

#{StringUtil.substringBetween(Job.getNodeOutput("shell_job1"),"<name>","<name1>")}

数据开发中的shell作业,是根据脚本执行返回值判断脚本执行成功还是失败。 如果返回值是0,则判断脚本执行成功。非0为失败。

参数

用户可以参考表1和表2配置Shell节点的参数。

表1 属性参数

参数

是否必选

说明

节点名称

是

节点名称,只能包含英文字母、数字、中文字符、中划线、下划线、/、<>和点号,且长度小于等于128个字符。

默认情况下,节点名称会与选择的脚本名称保持同步。若不需要节点名称和脚本名称同步,请参考禁用作业节点名称同步变化禁用该功能。

Shell或脚本

是

可以选择Shell语句或Shell脚本。

  • Shell语句

    单击“Shell语句”参数下的文本框,在“Shell语句”页面输入需要执行的Shell语句。

  • Shell脚本

    在“脚本路径”参数后选择需要执行的脚本。如果脚本未创建,请参考新建脚本和开发Shell脚本先创建和开发脚本。

    说明:

    若选择Shell语句方式,数据开发模块将无法解析您输入Shell语句中携带的参数。

    Shell节点运行的输出结果不能大于30M,大于30M会报错。

主机连接

是

选择执行Shell脚本的主机。

须知:
  • Shell或Python脚本可以在该ECS主机上运行的最大并发数由ECS主机的/etc/ssh/sshd_config文件中MaxSessions的配置值确定。请根据Shell或Python脚本的调度频率合理配置MaxSessions的值。
  • 连接主机的用户需要具有主机/tmp目录下文件的创建与执行权限。
  • Shell和Python脚本都是发往ECS主机的/tmp目录下去运行的,需要确保/tmp目录磁盘不被占满。

参数

否

填写执行Shell脚本时,向脚本传递的参数,参数之间使用空格分隔,例如:a b c。此处的“参数”需要在Shell脚本中引用,否则配置无效。

说明:

请勿输入敏感信息,例如ak、sk、password、authorization等信息。

交互式输入

否

填写交互式参数,即执行Shell脚本的过程中,需要用户输入的交互式信息(例如密码)。交互式参数之间以空格分隔,Shell脚本根据交互情况按顺序读取参数值。

read -p语法的使用示例:

read -p “输入参数1和参数2”变量1 变量2
说明:

请勿输入敏感信息,例如ak、sk、password、authorization等信息。

容器环境变量

否

容器运行时的环境变量配置,容器的环境变量要支持可传入空间变量/常量。

支持单个添加和批量添加。

批量添加时,通过文本模式,可以批量添加多个资源配置,最多添加100条。多个配置之前使用英文分号分隔。例如:aa=1;bb=2。

说明:

如果您要使用敏感参数,并且要在AI DataLake进行加密,则需要填写特定的参数,否则不会在AI DataLake进行加密。特定参数包含pwd、passwd、password、token、sk、truststore、secretkey、access_key,ak等,不区分大小写。

表2 高级参数

参数

是否必选

说明

节点状态轮询时间(秒)

是

设置轮询时间(1~60秒),每隔x秒查询一次节点是否执行完成。

节点执行的最长时间

是

设置节点执行的超时时间,如果节点配置了重试,在超时时间内未执行完成,该节点将会再次重试。

失败重试

是

节点执行失败后,是否重新执行节点。

  • 是:重新执行节点,请配置以下参数。
    • 超时重试
    • 最大重试次数
    • 重试间隔时间(秒)
  • 否:默认值,不重新执行节点。
    说明:

    如果作业节点配置了重试,并且配置了超时时间,该节点执行超时后,系统支持再重试。

    当节点运行超时导致的失败不会重试时,您可前往“默认项设置”修改此策略。

    当“失败重试”配置为“是”才显示“超时重试”。

重试条件

否

失败重试选择“是”时,支持设置重试条件。

打开重试条件的开关,设置返回码的范围。

Shell作业可以根据返回码判断作业节点执行失败是否重试。用户可以定义Shell的返回结果码中哪些返回码可以重跑。

当前节点失败后,后续节点处理策略

是

节点执行失败后的操作:

  • 终止后续节点执行计划:停止后续节点的运行,当前作业实例状态显示为“失败”。
  • 终止当前作业执行计划:停止当前作业运行,当前作业实例状态显示为“失败”。
  • 继续执行下一节点:忽略当前节点失败,当前作业实例状态显示为“忽略失败”。
  • 挂起当前作业执行计划:当前作业实例的状态为运行异常,该节点的后续节点以及依赖于当前作业的后续作业实例都会处于等待运行状态。

是否空跑

否

如果勾选了空跑,该节点不会实际执行,将直接返回成功。

任务组

否

选择任务组。任务组配置好后,可以更细粒度地进行当前任务组中的作业节点的并发数控制,比如作业中包含多个节点、补数据、重跑等场景。

Shell节点:Shell作业算子示例

在华为云数据开发服务中,当Shell作业的运行环境配置为ECS(弹性云服务器)时,通常通过“参数”配置传递变量,并通过Shell脚本的标准输入或命令行参数处理交互逻辑。

  1. 参数配置示例

    在作业配置界面的“参数”标签页中,你可以定义输入参数。假设我们定义两个参数:

    • input_date:输入日期,默认值2023-10-01。
    • output_path:输出路径,默认值/tmp/output。

    配置方式:

    • 参数名称:input_date
    • 参数值:${input_date}(在脚本中引用)
    • 参数名称:output_path
    • 参数值:${output_path}(在脚本中引用)
  2. Shell脚本内容示例

    在“脚本”编辑区域,编写Shell脚本以使用这些参数。或者在Shell脚本中

    #!/bin/bash
    
    # 获取传入的参数
    # 注意:在DataArts Studio中,参数通常通过环境变量或命令行参数传递,具体取决于版本和配置方式。
    # 常见方式是通过环境变量 $INPUT_DATE 和 $OUTPUT_PATH,或者在脚本开头解析。
    # 假设参数通过环境变量传递(这是云数据平台常见的做法):
    
    INPUT_DATE="${input_date}"
    OUTPUT_PATH="${output_path}"
    
    echo "开始执行Shell作业..."
    echo "输入日期: ${INPUT_DATE}"
    echo "输出路径: ${OUTPUT_PATH}"
    
    # 创建输出目录
    mkdir -p ${OUTPUT_PATH}
    
    # 示例逻辑:生成一个包含日期的文件
    echo "Job executed on ${INPUT_DATE}" > ${OUTPUT_PATH}/result.txt
    
    echo "作业执行完成,结果已保存至${OUTPUT_PATH}/result.txt"
    
  3. 关于“交互式输入”

    在云数据平台的自动化作业调度环境中,通常不支持也不推荐使用标准的交互式输入(如read命令等待用户键盘输入),因为作业是在后台非交互式Shell环境中运行的。

    如果需要动态输入,建议采用以下方式替代:

    1. 使用参数传递:如上所示,通过作业配置中的“参数”功能传入所需值。
    2. 使用配置文件:将配置信息写入文件,脚本读取文件内容。
    3. 使用环境变量:在ECS运行环境中,平台可能会注入特定的环境变量,脚本可直接读取。

    如果必须模拟交互(不推荐用于生产调度):

    可以使用echo将输入重定向到read,但这通常用于测试而非正式作业。

    # 不推荐的交互式写法(在自动化环境中会挂起或失败)
    # read -p "请输入日期: " INPUT_DATE
    
    # 推荐的非交互式写法
    INPUT_DATE="${input_date}" # 从作业参数获取
    

相关文档