添加一个任务
上面添加了一条每周一到周五的每个小时执行一次命令“python3 /opt/get_k_data.py”。很明显可以看出来,“0 * * * MON-FRI”这一段是用来指定执行的时间,依次分别为分钟、小时、日、月、星期几。假如上面的任务,我们认为只需要交易时间执行就可以了,那么可以修改为:
这样就会在9:05、10:05、11:05、12:05、13:05、14:05和15:05执行。
如果有些定时任务必须跑在Windows下,那么可以采用Windows的Task Scheduler来管理,这是图形化的管理工具,这里不再赘述。
对于集成到平台中的任务,就可以通过开发框架的支持来实现,这里以Spring Framework为例说明。
Spring通过scheduled注解实现定时任务。
这个注解里是cron参数,和Linux的crontab类似,也是指定在某个固定的时间点执行。不过需要特别注意的是,和Linux不同的是,这里的cron是六个参数,分别是“秒、分钟、小时、日期、月、星期几”,多了一个“秒”。
这个注解里的参数fixDelay,它用来指定上一次任务执行结束到下一次任务调用之间的时间差,单位是milliseconds,因此上面的代码表示每次执行完毕后间隔半小时再执行一次doTask。
这个注解里的参数fixRate,它用来指定两次任务调用之间的时间差,单位是milliseconds,因此上面的代码表示每半个小时执行一次doTask。
虽然fixDelay和fixRate含义不同,可是有时候为了加速执行,我们会把改为并行执行,也就是说doTask中启动相应的线程来实际完成任务执行,那么这种情况下fixDelay和fixRate就没有太多差别了。
上面只是举了几个简单的例子,更多的使用方式可以参考spring的官方文档。
定时任务使用起来十分方便,可是也存在一些问题。
1.对于指定时间运行的任务,一旦错误过了执行时间应该怎么办?2.对于固定时间间隔执行的任务,如果在间隔时间内,上次任务执行还没有完毕应该怎么办?
3.如果任务之间有依赖关系,那么定时任务是否能够解决呢?如果不能应该怎么办?
那么我们应该怎么解决上述问题呢,后面将逐步深入讲解。