执行计划简单介绍原创
金蝶云社区-eris
eris
5人赞赏了该文章 953次浏览 未经作者许可,禁止转载编辑于2020年7月4日 16:42:57

说明:

 执行计划是windows后台服务发起执行,按参数配置进行调度,自动运行的计划程序。

大概情况:
1. 执行计划是由服务器的windows后台服务发起的。

2. 金蝶云的部署往往是一个管理中心,多个应用站点,多个账套;一个管理中心下,只允许一个应用站点调度,这里调度的包括管理中心下所有允许执行执行计划的账套。

3. 插件,下面提到的插件都是执行计划中注册的插件。

3. 执行计划运行过程主要包括取数,调度,验证,执行,结果处理。
4. 取数,每隔10分钟从所有账套取出所有满足条件的执行计划,取到的数放到调度队列中。
5. 调度,每隔1秒钟对调度队列中所有的执行计划轮询一遍,检查是否有满足条件的执行计划,满足则进行下一步,并更新其在调度队列中的下一次执行时间,这里的条件主要为执行计划的执行时间小于当前时间。
6. 验证,主要确定插件是否可以执行,如果可以执行,则把执行计划设置为运行状态(包括缓存和数据库中的),这里的验证主要包括执行计划的状态是否为准备状态和插件是否有效。
7. 执行,执行计划中注册的插件实际运行,并且返回结果。
8. 结果处理,对执行插件还回的结果进行处理,分为正常还回和抛出异常返回,此两种情况都会更新执行计划的下一次执行时间和执行状态,仅仅是显示的消息不同而已。如果一直没有还回,则执行计划会一直处于执行中的状态,此种情况如果超过了24个小时,平台会使用异常自动恢复机制处理。

9. 上面所说的下一次执行时间就是执行计划的执行时间。

10. 执行计划所有创建的插件都是单例模式,所以不要在插件中加全局变量。

11. 执行计划的验证是通过数据库层的,所以不管是否存在多管理中心都不存在并发调度的问题,但在多管理中心下无法做到按间隔有序调度。


常见问题:

1.开始运行好好的,后面报插件不存在错误?

这是因为执行计划的调度开始在应用站点1,后面可能在应用站点2, 站点1和站点2代码不一致导致的。

保证插件代码在所有应用站点相同即可。

2. 执行计划设置成准备状态,还是不运行?

执行计划验证有两层验证,一层是缓存,一层是数据库,如果上次的运行的插件没有结果还回,那么这两层中的执行计划都处于运行状态,而现在把执行计划设置为准备状态,只是改变数据库中的状态,缓存中的并没有改变,所以还是验证不通过,这种情况只有重启一下IIS,清除缓存数据。(后续版本会去掉缓存中的验证,大概2020年3月份版本)

3.服务插件执行完,下一次执行时间怎么算?
3.1 如果当前次执行时间+时间间隔 > 当前时间,则下一次执行时间 = 当前次执行时间+时间间隔
3.2 如果当前次执行时间+时间间隔 < 当前时间, 则下一次执行时间 = ((分)(当前时间-当前次执行时间)/ (分)时间间隔)*(分)时间间隔 +当前次执行时间
   示例(假设时间间隔为3分钟,当前次执行时间:10:00,当前时间为:10:10):

   则下一次执行时间 =((10:10-10:00)/3)*3+10:00=(10/3)*3+10:00=3*3+10:00=10:09 ,最新版本(2019年12月) 下一次执行时间则为:10:12了

4. 执行计划最近一次执行情况,老是显示执行计划还在执行中?

当执行计划上次的调度没有还回之前,其后的所有调度都无法在执行,在验证的时候就会产生这样的提示。

5. 所有执行计划未执行问题排查?

https://vip.kingdee.com/article/42750

6. 创建执行计划?
https://vip.kingdee.com/article/159111

5