关于用“period属性”还是使用“condition+修改批次变量”的方式触发每日定时执行流程的建议

浏览: 2317

在调度业界中,都有一个跑批的概念。我们通常希望流程在某个时间点开始每天执行一次。比如每天的凌晨1点开始执行一次。在TASKCTL中,有两种方式可以实现该需求。

使用“period属性”

period适应于每天、每周、每月或者月末月初等频率的跑批规则,如果需要用period来实现“每天的凌晨1点开始执行一次”,可以参考以下代码:

  <!-- 主控流程mainflow中添加如下代码 -->
<flow>
<name>subflow1</name>
<progname>project1_subflow1</progname>
<period>10 0 1 * * *</period>
</flow>

注:需要添加业务子流程project1_subflow1来处理具体业务。mainflow主流程只做控制处理。代码的意思表示每天凌晨1点起的10分钟内调用子流程project1_subflow1。


使用“condition+修改批次变量”

1、首先需要添加日期批次变量,如workdate,并设置变量格式为yyyymmdd,如20150101

2、编写流程模块代码如下:

<serial>
<name>MainModul_rootnode</name>
<begin>
<name>MainModul_beginjob</name>
</begin>
<nulljob>
<name>startctljob</name>
<jobdesc>启动触发控制节点</jobdesc>
<condition>if($(workdate)&lt;systime('yyyymmdd') and (systime('hh')&gt;='01')) CTL_DOIT else CTL_WAIT</condition>
</nulljob>
<!-- 用户模块代码自定义区开始 -->
<sh>
<name>shell</name>
<progname>$HOME/myshell.sh</progname>
<para>para1</para>
<jobdesc>shell脚本使用范例</jobdesc>
</sh>
<!-- 翻牌修改workdate -->
<modivarv>
<name>passflow</name>
<para>varname=workdate,varvalue=$(addday('$(workdate)', 'yyyymmdd', 1))</para>
<jobdesc>翻牌:修改变量</jobdesc>
</modivarv>
<end>
<name>MainModul_endjob</name>
</end>
</serial>

注:在正式启动的流程的时候,需要设置workdate 等于当前系统日期,以保证流程不会多次运行。


总结:使用period属性来处理较简单灵活,可以处理每月或每周的任一天的情况,但需要保证业务子流程运行在时间窗口内(上面设置的时间窗口为10分钟)只执行一次。使用“condition+修改批次变量”的方式适合定时定频跑批。一般情况下,我们都推荐“condition+修改批次变量”的方式

推荐 1
本文由 taskctl 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册