apache/dolphinscheduler · error · SchedulerException
QUARTZ_SCHEDULER_START_ERROR
QUARTZ_SCHEDULER_START_ERROR
Error message
QUARTZ_SCHEDULER_START_ERROR
What it means
The underlying Quartz scheduler.start() threw while transitioning the scheduler from STANDBY to RUNNING — typically because the Quartz JDBC job store cannot acquire its cluster lock, the datasource is misconfigured/unreachable, or a non-serialized Job class breaks startup. It is wrapped in a SchedulerException so the caller cannot silently run with a dead scheduler.
Source
Thrown at dolphinscheduler-scheduler-plugin/dolphinscheduler-scheduler-quartz/src/main/java/org/apache/dolphinscheduler/scheduler/quartz/QuartzScheduler.java:48
import org.quartz.Scheduler;
import com.google.common.collect.Sets;
@Slf4j
public class QuartzScheduler implements SchedulerApi {
private final Scheduler scheduler;
public QuartzScheduler(Scheduler scheduler) {
this.scheduler = scheduler;
}
@Override
public void start() throws SchedulerException {
try {
scheduler.start();
} catch (Exception e) {
throw new SchedulerException(QuartzSchedulerExceptionEnum.QUARTZ_SCHEDULER_START_ERROR, e);
}
}
@Override
public void insertOrUpdateScheduleTask(int projectId, Schedule schedule) throws SchedulerException {
try {
CronTrigger cornTrigger = QuartzCornTriggerBuilder.newBuilder()
.withProjectId(projectId)
.withSchedule(schedule)
.build();
JobDetail jobDetail = QuartzJobDetailBuilder.newBuilder()
.withProjectId(projectId)
.withSchedule(schedule.getId())
.build();
scheduler.scheduleJob(jobDetail, Sets.newHashSet(cornTrigger), true);
log.info("Success scheduleJob: {} with trigger: {} at quartz", jobDetail, cornTrigger);
} catch (Exception e) {
log.error("Failed to add scheduler task, projectId: {}, scheduler: {}", projectId, schedule, e);View on GitHub (pinned to 02eac45a1b)
Solutions
- Verify the Quartz datasource (JDBC URL, credentials, driver) and that the quartz tables exist and are reachable
- Check for another master holding the Quartz cluster lock (QRTZ_LOCKS) or misaligned cluster properties (org.quartz.jobStore.clusterCheckinInterval)
- Inspect the caused-by exception in logs: ObjectNotFoundException indicates a non-serializable Job/Trigger class
- Restart the master after fixing the configuration so start() can be retried
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at dolphinscheduler-scheduler-plugin/dolphinscheduler-scheduler-quartz/src/main/java/org/apache/dolphinscheduler/scheduler/quartz/QuartzScheduler.java:48 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/dolphinscheduler@02eac45a1b (2026-09-06).
Data as JSON: /api/errors/e8c072cba921dac6.
Report an issue: GitHub.