精华内容
下载资源
问答
  • 今天小编就为大家分享一篇对Python定时任务的启动和停止方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 定时任务停止OfficeTaskV6.0.0.6
  • 1. 方式 1:通过Spring 的ScheduledAnnotationBeanPostProcessor 类终止定时任务 代码示例: /*得到BeanPostProcessor,用于终止定时任务*/ @Autowired private ScheduledAnnotationBeanPostProcessor post...

    1. 方式 1:通过Spring 的ScheduledAnnotationBeanPostProcessor 类终止定时任务

    代码示例:

        /*得到BeanPostProcessor,用于终止定时任务*/
        @Autowired
        private ScheduledAnnotationBeanPostProcessor postProcessor;
    
        /**
         * 通过 ScheduledAnnotationBeanPostProcessor 终止所有定时任务
         */
        public void cancelScheduledTasks() {
            // 拿到所有的task(带包装)
            Set<ScheduledTask> tasks = postProcessor.getScheduledTasks();
            Set<Object> rawTasks = new HashSet<>(tasks.size());
            for (ScheduledTask task : tasks) {
                Task t = task.getTask();
                ScheduledMethodRunnable runnable = (ScheduledMethodRunnable) t.getRunnable();
                Object taskObject = runnable.getTarget();
                // 将task所关联的对象放到Set中(就是带@Scheduled方法的类)
                rawTasks.add(taskObject);
            }
            // 调用postProcessBeforeDestruction()方法,将task移除并cancel
            for (Object obj : rawTasks) {
                postProcessor.postProcessBeforeDestruction(obj, "scheduledTasks");
            }
    
        }
    
    详情参考: 重启Spring Scheduler的正确打开方式

    2. 方式 2:通过类似钩子方法的方式,在定时任务类中定义一个 flag ,通过抛出线程的异常来结束定时任务

    参见:spring boot定时任务中新建线程如何做到可控终止

    3. 其他

    其他参考:SpringBoot定时任务升级篇(动态添加修改删除定时任务)

    展开全文
  • 其主要提供了schedule,scheduleAtFixedRate,scheduleWithFixedDelay三个方法,分别用于延迟执行任务,特定频率周期性执行任务,特定延迟周期性执行任务。 public interface ScheduledExecutorS...

    概述

    • ScheduledExecutorService继承于ExecutorService,主要提供任务的延迟和周期性执行的功能。其主要提供了schedule,scheduleAtFixedRate,scheduleWithFixedDelay三个方法,分别用于延迟执行任务,以特定频率周期性执行任务,以特定延迟周期性执行任务。

      public interface ScheduledExecutorService extends ExecutorService {
      
          // 延迟delay时间执行
          public ScheduledFuture<?> schedule(Runnable command,
                                             long delay, TimeUnit unit);
          
          public <V> ScheduledFuture<V> schedule(Callable<V> callable,
                                                 long delay, TimeUnit unit);
          // 固定频率周期性执行
          public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
                                                        long initialDelay,
                                                        long period,
                                                        TimeUnit unit);
          // 固定延迟周期性执行
          public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                           long initialDelay,
                                                           long delay,
                                                           TimeUnit unit);
      
      }
      
    1. schedule:延迟delay时间执行一次;
    2. scheduleAtFixedRate:以给定的频率周期性执行,分别为initialDelay,initialDelay+period,initialDelay+2period,…,如果出现越界,如initialDelay+period时线程执行时间过长,超过了initialDelay+2period,则下一次从initialDelay+3*period开始执行,不会出现重叠问题,即遵循happen-before原则。如果线程池存在多个线程,则每次执行可能在不同的线程当中。周期性执行的command如果在执行期间抛了异常而没有捕获,则之后不会继续执行该command,即不会再周期性执行了,scheduleWithFixedDelay也是一样;
    3. scheduleWithFixedDelay:每次执行相隔delay时间,即第一次延迟initialDelay执行,执行完之后等待delay时间后执行第二次,依次类推,跟每次执行的时间无关。

    周期性任务停止执行的原因

    • scheduleAtFixedRate和scheduleWithFixedDelay在执行周期性任务过程当中,如果任务自身抛了异常而没有捕获,则会导致scheduleAtFixedRate和scheduleWithFixedDelay不会继续周期性执行该任务了,即该任务停止执行。实现原理如下:
    1. ScheduledThreadPoolExecutor内部定义了一个内部类ScheduledFutureTask,ScheduledFutureTask继承于FutureTask,由该内部类来对任务进行封装,提供周期性执行的功能。

      private class ScheduledFutureTask<V>
              extends FutureTask<V> implements RunnableScheduledFuture<V> {
              ...
      }
      
    2. ScheduledFutureTask的run方法实现如下:主要在runAndReset方法中执行该周期性任务,如果执行成功返回true,则调用setNextRunTime设置下次执行时间;如果该方法返回false,则不再调用setNextRunTime设置下次执行时间,故该周期性任务停止执行。

      public void run() {
          boolean periodic = isPeriodic();
          if (!canRunInCurrentRunState(periodic))
              cancel(false);
          else if (!periodic)
              ScheduledFutureTask.super.run();
          // 周期性任务执行,返回true则说明此次执行成功,
          // 则调用setNextRunTime设置下次执行时间,
          // 否则不再设置下次执行时间,故不再执行
          else if (ScheduledFutureTask.super.runAndReset()) {
              setNextRunTime();
              reExecutePeriodic(outerTask);
          }
      }
      
    3. runAndReset的实现:执行任务,在成功执行时,则ran为true,state的值还是NEW,故方法返回值为true。但是如果在执行过程中,即c.call()调用时,出现了异常,则ran设置为false,并在catch块中通过setExeception处理。在setException中将state更新为了EXCEPTIONAL,同时唤醒等待该任务结果的线程,则最终的ran && s == NEW为false,导致runAndReset方法返回false,由上面run的分析可知,该周期任务不再执行。

      protected boolean runAndReset() {
          if (state != NEW ||
              !UNSAFE.compareAndSwapObject(this, runnerOffset,
                                           null, Thread.currentThread()))
              return false;
          boolean ran = false;
          int s = state;
          try {
              Callable<V> c = callable;
              if (c != null && s == NEW) {
                  try {
                      // 执行任务
                      c.call(); // don't set result
                      ran = true;
                  } catch (Throwable ex) {
                      setException(ex);
                  }
              }
          } finally {
              // runner must be non-null until state is settled to
              // prevent concurrent calls to run()
              runner = null;
              // state must be re-read after nulling runner to prevent
              // leaked interrupts
              
              // 重置任务状态,如果抛了异常,则
              // 在setException中已经将state更新为了EXCEPTIONAL
              s = state;
              if (s >= INTERRUPTING)
                  handlePossibleCancellationInterrupt(s);
          }
          return ran && s == NEW;
      }
      
    4. setException方法的定义如下:将state更新为EXCEPTIONAL,以便阻塞等待该任务执行结果的线程知道发生了异常,同时调用finishCompletion唤醒这些等待线程。

      /**
       * Causes this future to report an {@link ExecutionException}
       * with the given throwable as its cause, unless this future has
       * already been set or has been cancelled.
       *
       * <p>This method is invoked internally by the {@link #run} method
       * upon failure of the computation.
       *
       * @param t the cause of failure
       */
      protected void setException(Throwable t) {
          if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {
              outcome = t;
              
              // 将state更新为EXCEPTIONAL
              UNSAFE.putOrderedInt(this, stateOffset, EXCEPTIONAL); // final state
              
              // 唤醒阻塞等待该任务执行结果的线程
              finishCompletion();
          }
      }
      
    展开全文
  • quartz任务停止最佳实践方式

    千次阅读 2018-03-06 14:11:12
    The best way to know for sure is to send a SIGQUIT (kill -3) program and analyze the output to see which thread is still running. It is very likely that your job (which runs on top of one of Quartz t...

    The best way to know for sure is to send a SIGQUIT (kill -3) program and analyze the output to see which thread is still running.

    It is very likely that your job (which runs on top of one of Quartz threads) did not react to a shutdown signal and continued to work. For long-time-taking jobs, you can check jobExecutionContext.getScheduler().isShutdown() periodically or program your job to become InterruptableJob and properly respond to interruptions.

    展开全文
  • 我用timer写了一个定时任务停止和重新启动的,使用@Autowired来注入CusTask timer使用end方法销毁后重启不了,但是如果去掉@Autowired注入 改成new CusTask();就可以实现停止与重新启动了,但是new CusTask();里面的@...
  • Oracle 正在运行定时任务停止

    千次阅读 2016-07-22 10:08:00
    Oracle 定时任务: 1、DBMS_JOBS: dbms_jobs只是jobs对象的一个实例, 就像对于tables, emp和dept都是表的实例。 可以通过视图 SELECT * FROM DBA_JOBS; SELECT * FROM DBA_JOBS_RUNNING; SELECT * FROM all...

    Oracle 定时任务:

    1、DBMS_JOBS: 

    dbms_jobs只是jobs对象的一个实例, 就像对于tables, emp和dept都是表的实例。

    可以通过视图

    SELECT * FROM DBA_JOBS;

    SELECT * FROM DBA_JOBS_RUNNING;

    SELECT * FROM all_jobs;

    来查询

    停止运行job:dbms_job.broken(jobid,true);

    2、JOBS:jobs是oracle数据库的对象,由dbms_scheduler.create_job这个包创建

    通过视图

    select * from user_scheduler_jobs;

    SELECT * FROM USER_SCHEDULER_RUNNING_JOBS;

    来查询

    停止运行Job:EXEC DBMS_SCHEDULER.stop_job('JOB名称');

     

    转载于:https://www.cnblogs.com/Nouno/p/5694108.html

    展开全文
  • 定时任务停止执行?我们继续往下排查。 图上日志绿色部分, ScheduledAnnotationBeanPostProcessor 输出一个重要信息: No TaskScheduler/ScheduledExecutorService bean found for scheduled processing 查看 ...
  • 1. 查看oracle中的定时任务 select * from all_jobs; select * from dba_jobs; 2. 停止定时任务 begin dbms_job.broken(jobid,true); end;
  • spark 实时流任务优雅停止

    千次阅读 2018-04-21 19:35:52
    大数据优雅停止程序步骤(1)通过Hadoop 8088页面找到运行的程序(2)打开spark ui的监控页面(3)打开executor的监控页面(4)登录liunx找到驱动节点所在的机器ip以及运行的端口号(比如端口为56194)(5)然后执行...
  • 停止Flink任务

    千次阅读 2019-09-26 21:10:10
    1.简单粗暴 控制台中Ctrl+C 2.UI中点击"Cancel" 3.执行cancel命令,需要知道Flink的Job ID # flink cancel jobId 转载于:https://www.cnblogs.com/liugh/p/7478378.html...
  • 怎么停止和删除crontab任务

    千次阅读 2020-04-03 11:13:53
    首先打开 Linux 命令终端 ...在终端输入service crond stop可以停止crontab定时任务执行 删除定时脚本还可以通过sed指令删除,例如删除定时脚本test2.sh,输入sed -i '/test2.sh/d' /var/spool/c...
  • 2019独角兽企业重金招聘Python工程师标准>>...至此停止定时任务以及延申的问题都解决了,在此记录一下,希望对采坑的朋友有帮助。 转载于:https://my.oschina.net/deepSprings/blog/2994274
  • 情况一:正常情况(系统有service命令) 重启服务命令: [root@centos6 /]# ...情况二:当linux发行的版本没有service这个命令时候,用如下命令进行停止启动: 停止服务: [root@centos6 /]# /etc/init.d/c
  • 如何停止定时任务@Scheduled

    千次阅读 热门讨论 2020-09-12 09:51:05
    @Scheduled 定时任务可配置的表达式有 cron、zone、fixedDelay、fixedRate、initialDelay 等,当定时任务满足某个条件时,我们想停止它,修改代码显然是不适宜的办法,怎么办呢? 一、如果类中只有一个定时任务,...
  • 在上一篇文章中,介绍了quartz简单的使用方法...这一篇介绍关于任务的启动停止这些操作,废话不多说。 任务启动停止 启动任务 void start() throws SchedulerException; // 启动任务 停止任务 void shutdown() t...
  • 业务场景是这样的:比如我需要执行一段代码,当这段...前面我用Spring 的TaskSchedule但是在执行run的时候,执行到一定的条件如何也停止不了,所有应java自带的定时的功能可以很好的实现定时任务,希望对你有所帮助
  • 本文通过linux的编写shell 脚本,可以执行springboot.jar 的启动,停止,重启和状态查询等功能;同时使用linux的crontab 功能实现定时开启与关闭
  • 安全停止sparkStreaming任务

    千次阅读 2017-12-18 08:24:06
    1.确保数据处理完后,才停止Job 原因: 因为Spark Streaming流程序比较特殊,所以不能直接执行kill -9 这种暴力方式停掉,如果使用这种方式停程序,那么就有可能丢失数据或者重复消费数据。为什么呢?因为流程序一旦...
  • 1.所有任务日志均无输出,似乎都停止了 问题发生原因: 1.这30多个任务中,有一个任务【JOB-1】在执行时处理过慢,发生了阻塞。 2.因为是通过继承Job执行quartz任务,到了设定的时间间隔后,【JOB-1】在上次还...
  • 前两天vos线上服务遇到一个问题,定时任务突然全部停下来不跑了。看日志也没发现什么明显的异常输出,加上比较忙,所以干脆直接使用重启大法。没想到过了两天突然发现定时任务又全部停了,恰好正在赶需求,vos又是一个...
  • 最近在进行数据迁移的任务(就是迁移历史数据),数据量很大,需要运行几个月才能运行完。要求是每天的非工作时间定时进行迁移,...通过在网上搜查资料发现了停止执行任务的代码如下: public static void removeJob
  • 由于业务需要,停止Quartz中正在执行的任务1、任务类只需要实现InterruptableJob类,然后实现interrupt()方法。2、在这个方法中进行标记的改变,在执行中进行这个标记判断,就可实现中断任务了3、另外在调度器上调用...
  • 安卓handler停止任务

    千次阅读 2017-09-09 18:56:31
    停止
  • jenkins构建并向tomcat部署war包,卡在了部署操作: Deploying D:\app\jenkins\workspace...感觉tomcat这里出了奇怪问题导致的,关闭tomcat后,jenkins部署连接断开,任务成功停止。 重启tomcat,重新构建任务。 ...
  • 定时任务跑着跑着就停止问题

    千次阅读 2020-05-17 08:48:45
    定时任务拉取数据。 到月底的时候一看,半个月没跑了,很好,这半个月的数据手动补回来吧。 解决方案 可能的原因不只一种。 代码中有错误数据 定时任务一般用于批量跑数据。 如果有一条数据有问题,例如金额是 abc...
  • 定时任务就是在指定时间执行程序,或周期性执行计划任务。Java中实现定时任务的方法有很多,本文从从JDK自带的一些方法来实现定时任务的需求。 Timer和TimerTask 本文先介绍Java最原始的解决方案:Timer和TimerTask ...
  • FreeRTOS中的任务和多线程的概念差不多,但是任务的本质是把时间片无限的切小,小到人分辨不出来,其实还是一个时间只能运行一个任务,这是和多线程的根本区别。 FreeRTOS中的任务有几种运行态: 如果我正在运行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 429,812
精华内容 171,924
关键字:

任务停止

友情链接: dco.zip