apache/dolphinscheduler · error · IllegalArgumentException
Unsupported startup script name:
Error message
Unsupported startup script name:
What it means
SeatunnelTaskChannel.createTask() dispatches to SeatunnelFlinkTask or SeatunnelEngineTask based on the startupScript string; when it matches neither STARTUP_SCRIPT_FLINK nor STARTUP_SCRIPT_SEATUNNEL it throws IllegalArgumentException("Unsupported startup script name:..."). It is a fail-fast guard against an unknown SeaTunnel engine variant.
Source
Thrown at dolphinscheduler-task-plugin/dolphinscheduler-task-seatunnel/src/main/java/org/apache/dolphinscheduler/plugin/task/seatunnel/SeatunnelTaskChannel.java:49
public class SeatunnelTaskChannel implements TaskChannel {
@Override
public SeatunnelTask createTask(TaskExecutionContext taskRequest) {
SeatunnelParameters seatunnelParameters =
JSONUtils.parseObject(taskRequest.getTaskParams(), SeatunnelParameters.class);
assert seatunnelParameters != null;
String startupScript = seatunnelParameters.getStartupScript();
if (startupScript.contains(STARTUP_SCRIPT_SPARK)) {
return new SeatunnelSparkTask(taskRequest);
}
if (startupScript.contains(STARTUP_SCRIPT_FLINK)) {
return new SeatunnelFlinkTask(taskRequest);
}
if (startupScript.contains(STARTUP_SCRIPT_SEATUNNEL)) {
return new SeatunnelEngineTask(taskRequest);
}
throw new IllegalArgumentException("Unsupported startup script name:" + seatunnelParameters.getStartupScript());
}
@Override
public AbstractParameters parseParameters(String taskParams) {
return JSONUtils.parseObject(taskParams, SeatunnelParameters.class);
}
}
View on GitHub (pinned to 02eac45a1b)
Solutions
- Set the task's startup script to one of the supported values: 'flink' or 'seatunnel.sh' (Zeta engine).
- If you intend to run Spark, upgrade the dolphinscheduler-task-seatunnel plugin/worker to a version that registers the Spark task type.
- Keep worker and master plugin versions in sync so the UI's options match what the worker recognizes.
- Check for whitespace/case mistakes in the stored startupScript value.
Example fix
// before
{"startupScript":"spark"} // unsupported by installed plugin
// after
{"startupScript":"seatunnel.sh"} Defensive patterns
Strategy: validation
Validate before calling
Set<String> supported = Set.of("flink", "seatunnel");
String script = seatunnelParameters.getStartupScript();
if (script == null || supported.stream().noneMatch(script::contains)) {
throw new IllegalArgumentException("startupScript must contain 'flink' or 'seatunnel', got: " + script);
} Try / catch
try {
Task t = channel.createTask(taskRequest);
} catch (IllegalArgumentException e) {
log.error("Unsupported SeaTunnel startup script; use flink or seatunnel.sh", e);
} Prevention
- Choose only engine options supported by the installed plugin version
- Keep master and worker plugin versions in sync
- Avoid hand-editing startupScript values in stored task params
When it happens
Trigger: Task params carry a startupScript value other than flink/run/seatunnel (or any string containing the recognized constants) — e.g. 'spark' on a build without the spark task class, empty string, or a custom script name.
Common situations: Users choose the Spark engine in the UI while the deployed plugin only supports flink and seatunnel(zeta), task params edited by hand, or version drift where newer UI writes a startup script the older worker plugin doesn't recognize.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- grpc check condition %s not supported
- SeaTunnel task params is not valid
- The current SeaTunnel task has been interrupted
- Execute Seatunnel task failed
- cancel application error
AI-assisted analysis of apache/dolphinscheduler@02eac45a1b (2026-09-06).
Data as JSON: /api/errors/44574d15eaa04be6.
Report an issue: GitHub.