# SHELL 程序
# 说明
Shell 程序是 DolphinScheduler 中最通用、最灵活的任务类型(可运行任意 Shell 命令 / 脚本,包括封装 spark-submit/flink run 等)。
worker 执行该任务的时候,会生成一个临时 shell 脚本,并使用与租户同名的 linux 用户执行这个脚本。
- 支持单行命令、多行脚本、引用外部脚本文件;
- 可结合 DolphinScheduler 的参数体系(全局 / 项目 / 工作流 / 任务参数)实现动态逻辑;
- 支持失败重试、超时控制、资源依赖等高级特性;
- 执行结果以「命令退出码」判定:0 表示成功,非 0 表示失败。
# 前置准备(可选)
- 脚本文件管理:若执行外部脚本,建议将脚本上传到 DolphinScheduler 「资源中心」(推荐),或确保 Worker 节点本地路径有该脚本且有执行权限;
- 权限配置:DolphinScheduler 租户用户(如 hadoop)需对脚本 / 执行目录有「读 / 执行」权限;
- 环境变量:如需使用自定义环境变量(如 JAVA_HOME、HADOOP_HOME),需在 bin/env/dolphinscheduler_env.sh 中配置并重启 Worker。
# 配置项说明
1. 基础环境配置(必选)
| 配置项 | 默认值 | 描述 |
|---|---|---|
| 脚本 | - | 在线直接编写 Shell 代码(适合短脚本 / 单命令)。 |
脚本内容支持 3 种配置方式,按需选择:
方式 1:单行命令(简单场景)
直接填写单行 Shell 命令,示例:
hive -e "use ods; select count(*) from user_info where dt='${sys.date}';"
方式 2:多行脚本(复杂逻辑)
填写多行 Shell 脚本,支持条件判断、循环等,示例:
#!/bin/bash
# 定义本地变量
today=${sys.date}
# 创建临时目录
mkdir -p /tmp/ds_shell_${today}
# 执行 HDFS 操作
hdfs dfs -mkdir -p /user/ds/ods/user_info/dt=${today}
# 执行失败则退出(非 0 码)
if [ $? -ne 0 ]; then
echo "HDFS 目录创建失败"
exit 1
fi
echo "任务执行成功"
exit 0
2. 运行控制配置(可选)
这类配置决定 Shell 程序在 DolphinScheduler 内的运行规则,属于调度层面的配置。在「通用配置」中进行配置。
| 配置项 | 默认值 | 描述 |
|---|---|---|
| 任务优先级 | MEDIUM | worker 线程数不足时,根据优先级从高到低依次执行,优先级一样时根据先进先出原则执行。 |
| Worker 分组 | default | 任务分配给 worker 组的机器执行,选择 Default,会随机选择一台 worker 机器执行。 |
| 任务组 | - | 用于控制任务实例并发,选择项目中已经定义好的任务组。 |
| 任务组优先级 | 0 | 任务在任务组内运行的优先级,数字越大优先级越高。 |
| 环境名称 | - | 运行程序时指定的虚拟环境。 |
| 本地参数 | - | 是程序局部的用户自定义参数,会替换程序中以 ${变量} 的内容。 |
| 失败重试次数 | 0 | 任务失败后的重试次数,单位:次。 |
| 失败重试间隔 | 1 | 多次重试之间的等待时间,单位:分钟。 |
| 超时告警 | 关闭 | 勾选超时告警、超时失败,当任务超过”超时时长”后,会发送告警邮件并且任务执行失败。 |
# 关键特性与使用技巧
- 参数引用规则
- 系统内置变量:直接引用 ${sys.date}(当前日期)、${sys.datetime}(当前时间)、${task.id}(任务 ID)等;
- 自定义参数:任务 / 工作流 / 项目 / 全局参数,优先级:任务参数 > 工作流参数 > 项目参数 > 全局参数;
- 变量传递:多行脚本中引用参数需用 ${参数名},示例:
# 引用自定义参数 biz_date echo "当前处理日期:${biz_date}" - 执行权限与路径 脚本默认在 Worker 节点的 ${DOLPHINSCHEDULER_WORKER_LOG_PATH}/tasks/script/ 目录下执行; 执行用户需与 DolphinScheduler 租户配置一致(避免权限不足); 建议脚本中使用绝对路径(如 /usr/bin/hive 而非 hive),避免环境变量问题。
- 日志与调试 任务执行日志:点击任务「日志」标签,可查看完整的 Shell 输出(包括 stdout 和 stderr); 调试技巧:在脚本中增加 set -x(开启调试模式)或 echo 命令输出关键变量,示例:
set -x # 打印所有执行的命令
echo "HIVE_DB: ${hive_db}"
hive -e "use ${hive_db}; show tables;"
set +x # 关闭调试模式
# FAQ
- 任务报「权限拒绝」
原因:执行用户对脚本 / 目录无执行权限;
解决:给脚本添加执行权限(chmod +x script.sh),或修改 DolphinScheduler 租户用户。
- 参数引用失效
原因:参数名拼写错误、优先级覆盖、脚本中未用 ${} 包裹;
解决:检查参数名,在脚本中增加 echo ${参数名} 调试,确认参数值是否正确。
- 脚本执行超时
原因:任务逻辑耗时过长、资源不足;
解决:调整「超时时间」,优化脚本逻辑(如拆分任务),增加 Worker 节点资源。
- 资源中心脚本找不到
原因:未勾选资源、资源路径错误;
解决:确认「资源」配置中勾选了脚本,使用 ${BASE_DIR} 引用脚本路径。