由于路径重复导致无法正确读取到Jar
bash
[INFO] 2025-04-13 06:14:57.975 +0000 - Final Shell file is:
[INFO] 2025-04-13 06:14:57.975 +0000 - ****************************** Script Content *****************************************************************
[INFO] 2025-04-13 06:14:57.976 +0000 - #!/bin/bash
BASEDIR=$(cd `dirname $0`; pwd)
cd $BASEDIR
${JAVA_HOME}/bin/java -classpath .:/tmp/dolphinscheduler/exec/process/hadoop/15123518621664/16374306006816_3/26335/246036:/tmp/dolphinscheduler/exec/process/hadoop/15123518621664/16374306006816_3/26335/246036//tmp/dolphinscheduler/exec/process/hadoop/15123518621664/16374306006816_3/26335/246036/game-utils-1.0-SNAPSHOT.jar -jar /tmp/dolphinscheduler/exec/process/hadoop/15123518621664/16374306006816_3/26335/246036//tmp/dolphinscheduler/exec/process/hadoop/15123518621664/16374306006816_3/26335/246036/game-utils-1.0-SNAPSHOT.jar
[INFO] 2025-04-13 06:14:57.976 +0000 - ****************************** Script Content *****************************************************************
[INFO] 2025-04-13 06:14:57.976 +0000 - Executing shell command : sudo -u hadoop -i /tmp/dolphinscheduler/exec/process/hadoop/15123518621664/16374306006816_3/26335/246036/26335_246036.sh
[INFO] 2025-04-13 06:14:57.978 +0000 - process start, process id is: 1414860
[INFO] 2025-04-13 06:14:58.978 +0000 - ->
Error: Unable to access jarfile /tmp/dolphinscheduler/exec/process/hadoop/15123518621664/16374306006816_3/26335/246036//tmp/dolphinscheduler/exec/process/hadoop/15123518621664/16374306006816_3/26335/246036/game-utils-1.0-SNAPSHOT.jar
解决办法:修改源码重新编译Dolphinscheduler3.2.1,替换dolphinscheduler-task-api-3.2.1.jar
java
package org.apache.dolphinscheduler.plugin.task.api.shell
//BaseLinuxShellInterceptorBuilder类的
private String shellBody() {
if (CollectionUtils.isEmpty(scripts)) {
return StringUtils.EMPTY;
}
String scriptBody = scripts
.stream()
.collect(Collectors.joining(System.lineSeparator()));
//新增去除重复路径
if(scriptBody.contains(".jar")){
log.info("确保去除重复路径");
scriptBody = scriptBody.replace(shellDirectory+"//","/");
}
scriptBody = scriptBody.replaceAll("\\r\\n", System.lineSeparator());
return ParameterUtils.convertParameterPlaceholders(scriptBody, propertyMap);
}
替换重启就正常了