当前位置: 首页 > 知识库问答 >
问题:

如何检查Quartz cron作业是否正在运行?

庄飞
2023-03-14

如何检查计划的Quartz cron作业是否正在运行?是否有API进行检查?

共有3个答案

海翔宇
2023-03-14

你看过这个答案了吗?尝试:

调度程序。getCurrentlyExecutingJobs()

公冶光亮
2023-03-14

如果您注意到QUARTZ_触发器表中有一个触发器_状态列。这将告诉您特定作业的触发器状态(TriggerState)。很可能您的应用程序没有与此表的直接接口,但quartz scheduler有,您可以通过以下方式检查状态:

private Boolean isJobPaused(String jobName) throws SchedulerException {

    JobKey jobKey = new JobKey(jobName);
    JobDetail jobDetail = scheduler.getJobDetail(jobKey);
    List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobDetail.getKey());
    for (Trigger trigger : triggers) {
        TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
        if (TriggerState.PAUSED.equals(triggerState)) {
            return true;
        }
    }
    return false;
}
苗信鸥
2023-03-14

调度程序。getCurrentlyExecutingJobs()在大多数情况下都可以工作。但请记住不要在作业类中使用它,因为它使用ExecutingJobsManager(JobListener)将正在运行的作业放置到HashMap,该HashMap在作业类之前运行,因此使用此方法检查作业是否正在运行肯定会返回true。一种简单的方法是检查点火时间是否不同:

public static boolean isJobRunning(JobExecutionContext ctx, String jobName, String groupName)
        throws SchedulerException {
    List<JobExecutionContext> currentJobs = ctx.getScheduler().getCurrentlyExecutingJobs();

    for (JobExecutionContext jobCtx : currentJobs) {
        String thisJobName = jobCtx.getJobDetail().getKey().getName();
        String thisGroupName = jobCtx.getJobDetail().getKey().getGroup();
        if (jobName.equalsIgnoreCase(thisJobName) && groupName.equalsIgnoreCase(thisGroupName)
                && !jobCtx.getFireTime().equals(ctx.getFireTime())) {
            return true;
        }
    }
    return false;
}

还要注意,此方法不知道集群。也就是说,它只会返回当前在该计划程序实例中执行的作业,而不是整个集群。如果在群集中运行Quartz,它将无法正常工作。

 类似资料:
  • 我想检查Quartz作业是否正在运行。我发现它可以使用调度程序。getCurrentlyExecutingJobs()。但是我对此感到困惑,我应该把它放在哪里才能得到结果呢?谢谢

  • 问题内容: 如何检查计划的Quartz Cron作业是否正在运行?是否有任何API可以进行检查? 问题答案: scheduler.getCurrentlyExecutingJobs()在大多数情况下应该可以工作。但是请记住不要在Job类中使用它,因为它使用ExecutingJobsManager(a JobListener)将正在运行的作业放到HashMap中,该HashMap在作业类之前运行,因

  • 问题内容: 我正在尝试创建一个bash实用程序脚本以检查我的服务器中是否正在运行docker守护进程。除了运行这样的代码之外,还有没有更好的方法来检查docker守护进程是否正在我的服务器中运行? 我想创建一个bash shell脚本,该脚本将检查我的docker守护程序是否正在运行。如果它正在运行,则什么也不做,如果没有,则启动docker守护程序。 我的伪代码是这样的。我正在考虑解析ps -e

  • 问题内容: 是否可以从工作流脚本中检查某项作业是否正在运行或已计划? 尽管使用阶段管理并发似乎足够: 并在以下阶段运行构建: 可能是有人手动开始工作 测试工作 ,而我只想在我的工作流程脚本中处理这种情况。例如,跳过构建或等待构建完成。 问题答案: 这适用于不使用 Groovy Sandbox的流 :

  • 问题内容: 我有这个独特的要求来检查给定的节点是否正在运行作业。我正在考虑使用groovy,因为它看起来是最简单的选择。 它使我能够找到从站是否在线。对我来说,下一步是检查它是否正在运行作业。 我正在考虑使用API函数setAcceptingTasks(false)来将slave标记为正在运行作业,以便下次当我使用isAcceptingTasks()查询时,我会得到false,因此不会在该slav

  • 我正在使用CuratorFramework(我还是个新手)来连接Zookeeper实例。我想导入配置,但在此之前,我想测试我的程序是否能够连接到Zookeeper。到目前为止,我有这样的想法: 我已经在本地机器上启动了ZooKeeper,我检查了与zkCli的连接,客户端可以连接到它。zookeeperCon变量设置为“127.0.0.1:2181”(我也尝试了localhost:2181)。问题