目录
一、问题描述
在海豚调度器中提交DataX(Oracle→Doris)同步任务,执行日志报错,核心信息:/opt/soft/python/bin/python2.7: No such file or directory,任务退出码127;同时修改dolphinscheduler_env.sh配置后,重启海豚调度器,修改内容被自动还原,无法持久化。
二、核心解决思路
规避海豚调度器配置文件覆盖问题,采用「系统软链接」方式,将调度器默认期望的路径(Python、DataX),映射到服务器上真实的安装路径,无需修改调度器任何配置文件(无需改动dolphinscheduler_env.sh),实现无侵入式路径适配,重启调度器后配置不丢失。
三、分步可执行操作(全程root用户执行)
前提准备
先查找服务器上「真实的Python2.7路径」和「真实的DataX根目录」,记录备用(后续命令需替换为实际路径):
# 1. 查找真实Python2.7路径(示例输出:/usr/bin/python2.7)
find / -name "python2.7" 2>/dev/null
# 2. 查找真实DataX根目录(找到datax.py所在的bin目录,上一级即为根目录)
# 示例输出:/opt/datax/bin/datax.py → 真实DataX根目录:/opt/datax
find / -name "datax.py" 2>/dev/null
记录备用(替换后续命令中的占位符):
-
真实Python2.7路径:
${REAL_PYTHON_PATH}(示例:/usr/bin/python2.7) -
真实DataX根目录:
${REAL_DATAX_PATH}(示例:/opt/datax)
步骤1:创建Python路径软链接(解决退出码127)
海豚调度器默认调用Python路径:/opt/soft/python/bin/python2.7,创建该路径的软链接,指向真实Python2.7:
# 1. 创建调度器期望的Python父目录(若不存在)
mkdir -p /opt/soft/python/bin
# 2. 删除原有冲突文件/软链接(若有,避免冲突)
rm -f /opt/soft/python/bin/python2.7
# 3. 创建软链接(替换${REAL_PYTHON_PATH}为真实路径,示例:/usr/bin/python2.7)
ln -s ${REAL_PYTHON_PATH} /opt/soft/python/bin/python2.7
步骤2:创建DataX路径软链接(规避配置覆盖)
海豚调度器默认调用DataX路径:/opt/soft/datax,创建该路径的软链接,指向真实DataX根目录:
# 1. 删除原有冲突文件/软链接(若有,避免冲突)
rm -rf /opt/soft/datax
# 2. 创建软链接(替换${REAL_DATAX_PATH}为真实路径,示例:/opt/datax)
ln -s ${REAL_DATAX_PATH} /opt/soft/datax
步骤3:修正DataX配置文件(避免路径生效后新报错)
步骤4:重启海豚调度器(使软链接生效)
# 进入海豚调度器bin目录(替换为你的实际bin路径)
cd /home/dolphinscheduler/dolphinscheduler/bin
# 停止所有服务
./stop-all.sh
# 等待10秒(确保所有进程停止)
sleep 10
# 启动所有服务
./start-all.sh
# 验证服务是否启动成功(输出包含MasterServer、WorkerServer即为正常)
jps | grep -E "MasterServer|WorkerServer"
四、验证方法(确保问题彻底解决)
验证1:软链接是否生效
# 1. 验证Python软链接(输出Python 2.7.x即为生效)
/opt/soft/python/bin/python2.7
# 2. 验证DataX软链接(输出DataX版本即为生效)
/opt/soft/datax/bin/datax.py
验证2:手动执行DataX任务(提前排查问题)
# 切换到root用户(调度器用root租户执行)
su - root
# 执行DataX任务(替换为你的修正后配置文件路径)
/opt/soft/python/bin/python2.7 /opt/soft/datax/bin/datax.py /你的配置文件路径/xxx.json
若能正常启动(无「No such file or directory」错误),说明软链接和配置文件均无问题。
验证3:调度器提交任务
-
清空调度器历史执行记录(避免缓存旧脚本);
-
提交「步骤3修正后的DataX配置文件」;
-
查看执行日志,若任务状态变为「running」且无退出码127,即为彻底解决。
五、注意事项(后续维护必看)
-
软链接维护:若后续服务器迁移Python/DataX路径,只需重新执行「步骤1、步骤2」,重建软链接,无需修改调度器配置;
-
权限问题:确保真实Python/DataX目录权限为755(
chmod -R 755 ${REAL_PYTHON_PATH%/*} ${REAL_DATAX_PATH}),避免软链接无法访问; -
配置文件复用:后续同步相同任务,可直接复用「步骤3的DataX配置文件」,只需修改表名、字段等业务信息;
-
避免误删软链接:不要手动删除
/opt/soft/python和/opt/soft/datax,否则会导致任务再次失败; -
重启调度器:后续无论因何种原因重启海豚调度器,软链接配置不会丢失,无需重新操作。
六、常见问题排查
-
重启后软链接失效:检查是否误删软链接,重新执行步骤1、步骤2即可;
-
手动执行DataX成功,调度器失败:检查调度器租户权限(root租户是否有执行Python/DataX的权限);
-
软链接创建成功,但执行报错「Permission denied」:执行
chmod -R 755 ${REAL_PYTHON_PATH%/*} ${REAL_DATAX_PATH},开放权限。