Shell节点

Shell节点支持标准Shell语法,不支持交互性语法。

使用限制

  • Shell节点支持标准Shell语法,不支持交互性语法。

  • Shell节点支持Serverless资源组(推荐)或旧版独享调度资源组执行。如需购买使用Serverless资源组,详情请参见新增和使用Serverless资源组

  • Serverless资源组上运行Shell节点时,如果您需要访问的目标端有白名单限制,请添加Serverless资源组对应IP至目标端应用。

  • 请勿在Shell里启动大量子进程,由于目前Shell节点没有资源限制,该操作可能会影响运行在该调度资源组上的其它任务运行。

说明

如果您在开发任务时,需要特定的开发环境支持,可使用DataWorks提供的自定义镜像功能,定制化构建任务执行所需的组件镜像。更多信息,请参见镜像管理

前提条件

已创建业务流程。数据开发(DataStudio)基于业务流程执行具体开发操作,因此创建节点前需先新建业务流程,详情请参见创建业务流程

创建通用Shell节点

  1. 进入数据开发页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据开发与治理 > 数据开发,在下拉框中选择对应工作空间后单击进入数据开发

  2. 鼠标悬停至新建图标,单击新建节点 > 通用 > Shell,在新建节点对话框输入节点名称及路径。

  3. 单击确认,完成节点的创建。

Shell节点使用资源

在DataWorks节点使用资源时,需要先将资源上传至DataWorks,并通过节点引用资源的方式,将资源加载入节点运行环境后,才可以在节点中使用资源。具体操作如下。

创建资源

DataWorks支持通过新建资源或上传已有资源两种方式,生成DataWorks中需使用的资源,使用哪种方式请以各类型资源的实际创建界面为准。

目前可在DataWorks创建MaxCompute及EMR(E-MapReduce)资源,详情请参见创建并使用MaxCompute资源创建和使用EMR资源

说明

资源需要提交后才可被节点引用。若生产任务需使用该资源,还需将该资源发布至生产环境。详情请参见发布任务

节点中引用资源

您可通过引用资源的方式在节点内使用资源时,节点成功引用资源后在节点代码最上方会显示@resource_reference{"资源名称"}注释代码。

引用步骤如下:

  1. 打开新建的Shell节点,进入节点编辑页面。

  2. 在数据开发左侧目录树下找到已上传的资源。

  3. 右键单击该资源,选择引用资源,则该资源将被引用至当前节点中。

    您可在节点编辑页面,通过编写代码运行该资源。

使用资源

Shell节点使用调度参数

通用Shell节点中的变量不允许自定义命名,只能以$1、$2、$3...命名(参数序号由小到大,依次递增),当参数的数量大于10时,请使用${10}的方式声明变量。配置及使用调度参数,详情请参见配置并使用调度参数,更多调度参数的赋值方式,请参见调度参数概述

配置参数如上图,在参数赋值区域为参数赋值,再进入代码调用区域定义内置参数$1,自定义参数$2、$3。参数赋值示例如下:

  • 内置参数$1赋值取业务时间:$bizdate

  • 自定义参数$2赋值取业务时间:${yyyymmdd}

  • 自定义参数$3赋值取业务时间: $[yyyymmdd]

说明

通用Shell节点仅支持使用表达式的方式为参数赋值。参数间使用一个空格隔开,并且参数取值与定义参数时的顺序对应。例如,Shell节点定义的第一个参数为$1,则参数赋值区域序号第一的赋值内容$bizdate即为$1的参数取值。

如何判断Shell自定义脚本任务是否执行成功

脚本运行成功或者失败是根据如下进程退出码来进行判断的:

  • 退出码0:表示成功。

  • 退出码-1:表示进程被终止。

  • 退出码2:需要平台自动重跑一次任务。

  • 其它退出码:表示失败。

一个Shell任务,如果第一条命令是无效命令,那么最终结果肯定是异常的,这时后面输入一条能有效运行的命令,结果会是成功的,具体示例如下:

#!/bin/bash
curl http://xxxxx/asdasd
echo "nihao"

这个任务在平台上最终成功运行,因为该脚本是正常退出的。

这时,把上述命令做一个修改,最终示例如下:

#!/bin/bash
curl http://xxxxx/asdasd
if [[ $? == 0 ]];then  
    echo "curl success"
else  
    echo "failed"  
    exit 1
fi
echo "nihao"

这样最终这个脚本会运行失败。

通过Shell脚本里面访问OSSUtils

OSSUtils使用路径、全路径,默认有安装。

  • /home/admin/usertools/tools/ossutil64

  • OSSUtils常用命令可参考:常用命令

配置用户名密码config可自行配置,比如将config基于运维助手将配置文件上传配置到该目录下:/home/admin/usertools/tools/myconfig

[Credentials]
        language = CH
        endpoint = oss.aliyuncs.com
        accessKeyID = your_accesskey_id
        accessKeySecret = your_accesskey_secret
        stsToken = your_sts_token
        outputDir = your_output_dir
        ramRoleArn = your_ram_role_arn

命令格式如下:

#!/bin/bash
/home/admin/usertools/tools/ossutil64 --config-file  /home/admin/usertools/tools/myconfig  cp oss://bucket/object object
if [[ $? == 0 ]];then
    echo "access oss success"
else
    echo "failed"
    exit 1
fi
echo "finished"

后续操作

若Shell节点需要周期性调度,您需要定义节点的调度属性,并通过任务发布流程将任务发布至生产环境。配置节点调度属性,详情请参见配置节点调度属性,发布任务至生产环境,详情请参见发布任务

相关文档

了解如何在Shell节点使用Python 2或Python 3命令运行Python脚本:详情请参见Shell类型节点运行Python脚本

了解如何在Shell节点使用OSSUtils工具:详情请参见Shell类型节点使用OSSUtils工具