互斥表示两个不同作业不能同时运行。作业互斥通过作业 ostr 属性实现。例如:

在上图中,两个作业 GetData1 与 GetData3 按串并关系,本来是可以同时运行的作业,但由于通过 ostr 属性设置相同互斥资源,从而使它们实现互斥并不能同时运行。
关于互斥资源的设置,主要通过一个自定义字符串来表示,只要名称相同, 就表示相关作业互斥。
作业之间的互斥不仅在相同模块中实现,也可以在不同模块甚至不同流程之间体现,只要资源名称相同即可。
实际上,在具体应用中,同一流程中距离相近的作业一般不会设置互斥,因为完全可以通过简单串并进行避免两个作业的同时运行,互斥更多的实际应用场景是在不同流程的作业之间实现互斥,这种距离遥远的作业,采用互斥属性更有实际意义。
另外,互斥只能对部署在同一调度服务器的流程生效,互斥资源名称的异同也是相对同一调度服务器而言。对于不同调度服务器之间的流程不会产生任何关系。
前面我们已经讲过,作业之间的先后关系依赖关系,主要通过串行组来实现, 但实际应用中,可能会发现两个需要依赖的作业很难通过串并组来实现。对于这种情况,我们可以通过强制依赖属性 lean 来实现。
以下是一段强制依赖设置的代码设计:

实际上,TASKCTL 强制依赖很类似一般程序语言中的 goto 语句,我们可以通过 goto 语句在程序内实现自由跳转。但同时我们也知道,一般情况下,语言设计思想都不建议使用或过多使用 goto 语句,而是尽量采用优良的逻辑设计去避免 goto 的使用,以便保证程序的健壮性与可读性。
在 TASKCTL 中也是同样的道理, 我们不建议用户使用 lean 属性,而是在流程设计时,多分析作业之间的关系,尽量采用串并条件分支等结构化的思路实现相应的功能,这样会使流程代码以及作业关系更清晰、更便于管理。
总之,我们要认识到,lean 要尽量少用或不用,它只是 TASKCTL 流程设计思想中结构化控制的。
执行计划控制策略在调度应用中非常普遍,是调度控制策略中最重要的策略之一。执行计划指作业的运行周期,简单说,指一个作业什么时候需要运行,比如每周一、每月初、每月底以及季末等。
在 TASKCTL 中,执行计划非常灵活,几乎可以定义任意周期,同时,TASKCTL 可以分别支持自然日期执行计划与逻辑日期执行计划。技术上,主要通过 datetype 与 period 两个属性结合使用来完成灵活的执行计
datetype 日期类型主要分自然日期与逻辑日期
1.自然日期:自然日期即系统日期,用 msystime 表示,datetype 缺省就为 msystime,此时通常不需要用户再修改。
2.逻辑日期:一个流程中可以存在多个逻辑日期,它主要通过私有参数中以类型为 date 参数进行定义,比如一般常用的 workdate 参数。如果我们以逻辑日期确定执行计划时,datetype 设置为相应 date 类型的私有变量参数名称即可。
period 计划表达式主要是在 unix 系统的 Crontab 设计思想基础上进行改造,5.0 及以前增加了时间窗口特征,但从 5.1 版本开始,taskctl 为了简化用户对 period 的使用难度,精简了时间窗口特征, 仅仅保留 [日] [月] [周]。
执行计划表达式格式与说明
[日] [月] [周]
整个表达式由三个字段组成,字段间通过空格分隔。
1.日:*表示每日;0 表示月末;-1 表示不按日判断,而是由周决定
2.月:*表示每月
3.周:*表示每天;0-6 分别代码礼拜天到礼拜六
表达式例子
1.“* * *”: 表示每天可执行,缺省就是 * * *
2.“0 6,12 *”:表示每年 6 月月末、12 月月末可执行
3.“-1 * 1,4”: 表示每周一、四可执行
4.“2,4-10 1,2 *”:表示 1,2 月的 2 号以及 4 到 10 号可执行
执行计划应用案例
以下通过代码举例说明执行计划的应用:

以上计划按自然日期确定。表示每年 1、4、7、9 月,每 1、15 日可以执行。

以上计划按逻辑日期 workdate 参数日期确定。表示每年 1、4、7、9 月,每 1、15 日可以执行。
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写Ruby,但似乎Redis之类的数据库和Rescue、RabbitMQ等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果Redis崩溃,数据也会丢失,因为它本质上只是内存。所有这些让我开始关注erlang和
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述
有什么方法可以告诉sidekiq一项工作依赖于另一项工作,并且在后者完成之前无法开始? 最佳答案 仅使用Sidekiq;答案是否定的。正如DickieBoy所建议的那样,您应该能够在依赖作业完成时将其启动。像这样。#app/workers/hard_worker.rbclassHardWorkerincludeSidekiq::Workerdefperform()puts'Doinghardwork'LazyWorker.perform_async()endend#app/workers/lazy_worker.rbclassLaz
我想在Windows7上安装带有ruby1.9.3的rspec-railsgem。我收到一些错误消息,提示无法安装某些json库。所以,我使用下面的说明来解决它。来源=The'json'nativegemrequiresinstalledbuildtools从[rubyinstaller.org][3]下载[Ruby1.9.3][2]从[rubyinstaller.org][3]下载DevKit文件对于Ruby1.9.3,使用[DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe][4]将DevKit解压到路径C:\Ruby193\DevKit运行cd
假设我的Rails项目中有一个设置实例变量的Ruby类。classSomethingdefself.objects@objects||=begin#somelogicthatbuildsanarray,whichisultimatelystoredin@objectsendendend是否可以多次设置@objects?是否有可能在一个请求期间,在上面的begin/end之间执行代码时,可以在第二个请求期间调用此方法?我想这实际上归结为Rails服务器实例如何fork的问题。我应该改用Mutex还是线程同步?例如:classSomethingdefself.objectsreturn@o
目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'
我有一个bash脚本,它运行一个ruby脚本来获取我的Twitter提要。##/home/username/twittercron#!/bin/bashcd/home/username/twitterrubytwitter.rbfriends命令行运行成功/home/username/twittercron但是当我尝试将它作为cronjob运行时,它运行了但无法获取提要。##crontab-e*/15*****/home/username/twittercron脚本已经chmod+x。不知道为什么会这样。有什么想法吗? 最佳答案