网站首页 > 博客文章 正文
简介
Saturn (任务调度系统)是唯品会开源的一个分布式任务调度平台,取代传统的Linux Cron/Spring Batch Job的方式,做到全域统一配置,统一监控,任务高可用以及分片并发处理。
Saturn是在当当开源的Elastic Job基础上,结合各方需求和我们的实践见解改良而成。
本文档针适用于3.x版本。
重要特性
- 支持多种语言作业,语言无关(Java/Go/C++/PHP/Python/Ruby/shell)
- 支持秒级调度
- 支持作业分片并行执行
- 支持依赖作业串行执行
- 支持作业高可用和智能负载均衡
- 支持异常检测和自动失败转移
- 支持异地容灾
- 支持多个集群部署
- 支持跨机房区域部署
- 支持弹性动态扩容
- 支持优先级和权重设置
- 支持docker容器,容器化友好
- 支持cron时间表达式
- 支持多个时间段暂停执行控制
- 支持超时告警和超时强杀控制
- 支持灰度发布
- 支持异常、超时和无法高可用作业监控告警和简易的故障排除
- 支持失败率最高、最活跃和负荷最重的各域各节点TOP10的作业统计
- 经受住唯品会生产800多个节点,每日10亿级别的调度考验
快速开始
Saturn包括两大部分,Saturn Console和Saturn Executor。
Saturn Console是一个GUI,用于作业/Executor管理,统计报表展现,系统配置等功能。它同时也是整个调度系统的大脑:将作业任务分配到各Executor。
Saturn Executor是执行任务的Worker:按照作业配置的要求去执行部署于Executor所在容器或物理机当中的作业脚本和代码。
为了能让用户对Saturn有一个感性认识,我们提供了两种快速启动Console和Executor的方法。
至于生产环境的部署,请参见后面的部署指南。
1 一键启动
首先,请确保本机安装了以下软件:
- JDK 7 or JDK 8
- Maven 3.0.4+
- node.js 8.7.0+
- npm 5.4.2+
- docker (版本不限)
然后,git clone本仓库到本地,checkout对应版本分支,进入quickstart目录。如果是Windows系统,请运行quickstart.bat,如果是Linux/Unix/MacOS系统,请运行quickstart.sh。
$ git clone https://github.com/vipshop/Saturn
$ git checkout develop
$ cd saturn-docker
$ chmod +x quickstart.sh
$ ./quickstart.sh
quickstart脚本将做如下事情:
- 启动内嵌的ZooKeeper
- 启动内嵌的Saturn-Console
- 启动内嵌的Saturn-Executor(包含了一个Java作业的实现)
- 在Saturn-Console添加该Java作业
启动完成后,您可以访问Saturn-Console:http://localhost:9088
如果你见到如下界面,则恭喜你,你的console已经启动。
在首页的search bar点击会出现一个叫做'mydomain'的namespace。点击进去会见到一个名为'demoJavaJob'的作业,该作业有5个分片,每隔5秒调度一次。
一个叫做'executor-1'的executor执行器调度该作业。
2 Docker启动
$ git clone https://github.com/vipshop/Saturn
$ git checkout develop
$ cd saturn-docker
$ chmod +x quickstart-docker.sh
$ ./quickstart-docker.sh
quickstart-docker.sh脚本将做如下事情:
- 构建基于OpenJDK7的基础镜像
- 构建基于OpenJDK7的Saturn-Console镜像
- 构建基于OpenJDK7的Saturn-Executor镜像
- 启动一个ZooKeeper集群的容器
- 启动一个Saturn-Console容器
- 启动两个Saturn-Executor容器
- 添加一个Java作业和一个Shell作业
开发你的作业
这一节想介绍如何开发你的作业,包括Java和Shell两种类型,并使用你熟悉的IDE进行调试。
但要注意的是,作业开发完需要将其部署到Executor才能真正的工作。
关于如何部署,见“部署 Saturn Executor”一节。
0 前置条件
确保你已经部署好Saturn Console。如果没有,请参见“部署Saturn Console”一节。
1 开发Java作业
1.1 添加maven依赖
在pom.xml添加dependency
<dependency>
<groupId>com.vip.saturn</groupId>
<artifactId>saturn-job-api</artifactId>
<!-- 修改成指定版本 -->
<version>master-SNAPSHOT</version>
</dependency>
以及plugin
<plugin>
<groupId>com.vip.saturn</groupId>
<artifactId>saturn-plugin</artifactId>
<!-- 版本与saturn-job-api一致 -->
<version>master-SNAPSHOT</version>
</plugin>
1.2 开发第一个Java作业
修改现在类或者增加一个新的类,继承自AbstractSaturnJavaJob ,实现 handleJavaJob方法。
public class DemoJob extends AbstractSaturnJavaJob {
@Override
public SaturnJobReturn handleJavaJob(final String jobName, final Integer shardItem, final String shardParam, final SaturnJobExecutionContext context) {
// do what you want here ...
// 返回一个SaturnJobReturn对象,默认返回码是200表示正常的返回
return new SaturnJobReturn("我是分片"+shardItem+"的处理结果");
}
}
handleJavaJob方法是作业调用主入口,当调度周期到达时,Saturn会调用该方法。
传入参数如下:
- jobName:作业名
- shardItem:分片编号(从0开始)分片参数(在Console配置)
- shardParam:分片参数(在Console配置)
- context:调用上下文
上面只是展示了如何写一个简单的作业,实际上的作业会复杂很多,AbstractSaturnJavaJob提供的一些工具方法或许会减少你的工作量。更多的AbstractSaturnJavaJob 的方法介绍可以看教程。
关于JavaJobReturn
JavaJobReturn是作业结果返回的封装。里面三个成员变量,包括:
- returnCode: 结果码。0代表结果成功,其余值代表失败。默认为0。用户可以根据自己业务的情况设置返回值,但注意,如下返回码是保留字不能使用,包括:0,1,2,9999。
- returnMsg:返回信息。将显示在Console里面。没有默认值。
- errorGroup:异常码。详情参见教程。
1.3 在IDE中调试作业
这一步会在IDE启动一个Executor进程。
1.3.1 Eclipse
点工程右键 -> Run/Debug As -> Run Configuration
- namespace: 命名空间。命名空间用于对作业进行分组,作业必须属于某个命名空间,同一个命名空间下的作业名不能重复。
- executorName:执行结点唯一标识
1.3.2 IntelliJ IDEA
添加启动参数:
saturn:run -Dnamespace=www.abc.com -DexecutorName=exec01 -DVIP_SATURN_CONSOLE_URI=http://127.0.0.1:9088
参数含义请参考3.1节
1.4 在Console添加Java作业
当IDE启动了Executor后,作业还是不能执行,直到在Console添加和启动相应的Java作业。
在Console添加一个Java作业,作业实现类必须是你所实现的Java作业的className。
- 作业类型: 分为Java定时作业和Shell定时作业,这里选择Java定时作业
- 作业名:作业ID标识,namespace下必须唯一
- 作业实现类:作业实现类的完整包名+类名
- cron表达式:作业定时表达式
- 作业分片总数:表示并发执行的数量,2代表该作业同时有两个进程在并发执行,每个进程都有自己专门的脚本和参数(这些进程可能同跑在不同机器上的)。
- 分片序列号/参数对照表:定义每个分片执行的完整脚本路径及参数。这是saturn最重要的参数之一。分片号从0开始,最大为分片总数-1。
- 作业描述信息 (Optional):作业描述
更多高级的配置,可以在作业编辑页面进行编辑。
然后启动这个作业
如果一切正常会在IDE的console看到作业运行的日志,也可以在“分片”标签看到执行的结果。(当然,前提是作业到点执行了)
下面是执行成功看到的日志:
[2017-12-13 15:09:45.206] [INFO] [executor_001_echoJavaJob-saturnQuartz-worker] [com.vip.saturn.job.basic.AbstractSaturnJob] >>> [echoJavaJob] msg=Job echoJavaJob handle items: [0, 1]
[2017-12-13 15:09:45.206] [INFO] [Saturn-echoJavaJob-1-thread-1] [com.vip.saturn.job.java.SaturnJavaJob] >>> [echoJavaJob] msg=Running SaturnJavaJob, jobClass is com.test.DemoJob
[2017-12-13 15:09:45.207] [INFO] [Saturn-echoJavaJob-1-thread-3] [com.vip.saturn.job.java.SaturnJavaJob] >>> [echoJavaJob] msg=Running SaturnJavaJob, jobClass is com.test.DemoJob
[2017-12-13 15:09:45.207] [INFO] [executor_001_echoJavaJob-saturnQuartz-worker] [com.vip.saturn.job.basic.AbstractSaturnJob] >>> [echoJavaJob] msg=echoJavaJob finished, totalCost=1, return={0=SaturnJobReturn [returnCode=0, returnMsg=我是分片0的处理结果, errorGroup=200, prop={SATURN_TRACE_ID=4882587783541623202, SATURN_PARENT_SPAN_ID=1611817686233844130}], 1=SaturnJobReturn [returnCode=0, returnMsg=我是分片1的处理结果, errorGroup=200, prop={SATURN_TRACE_ID=4418419319829081425, SATURN_PARENT_SPAN_ID=3024241466322103633}]}
下面是Console看到的结果:
1.5 打包&部署
如果上述步骤没有问题,则意味着作业在本地验证通过。现在可以进行部署了。
运行以下命令打包
mvn saturn:zip
会在/target目录下得到-app.zip的一个压缩包,参照部署指引将压缩包部署到executor。
当你走完这一步,你的作业已经开发并调试完毕,请参见“部署Saturn Executor”一节,了解如何把打包好的作业部署到Executor运行。
2 开发Shell作业
Shell作业实际上不局限于Shell脚本,还可以是一切能在Executor所在服务器运行的脚本和程序,脚本/程序的开发语言不受限制,可以使Python/Java/PHP/Ruby …。
具体原理见下图。在满足调度条件时,Saturn Executor会调用System.exec()去调用脚本/程序。
2.1 开发第一个Shell作业
开发Shell作业有两种形式:
- 简易开发:直接在Saturn Console文本框中编写Shell脚本,无需在Executor放置脚本,该方法适合运行简易的脚本
- 脚本开发:把脚本/程序部署在特定路径上,然后在Saturn Console上配置脚本运行路径
根据实际需求选择任意一种方式新建Shell作业
2.1.1 简易开发
首先通过首页进入默认域(或自定义域)
然后点击“添加”按钮添加新作业
接着添加Shell作业,在“分片参数”输入框中输入Shell脚本
最后点击“确定”保存
2.1.2 脚本开发
您还可以选择脚本来开发Shell作业。
首先准备脚本,在/apps/sh目录下新建demojob.sh脚本,脚本内容:
#/bin/sh
echo "hello world"
然后给脚本新增可执行权限:
chmod +x /apps/sh/demojob.sh
脚本准备完后添加Shell作业
留意分片参数配置,参数的值是执行/apps/sh/demojob.sh脚本的命令。
最后点击“确定”保存。
2.2 启动Executor
Shell没办法像Java一样使用Maven插件去调试,我们需要下载并启动一个Executor标准包去验证我们刚开发好的脚本。详情参见Saturn Executor部署指南.
对于Shell作业,Executor的部署比Java作业要简单,只要下载并解压,执行脚本的启动命令即可。
2.3 启动作业
当Executor启动后,作业不会自动执行,直到在Saturn Console启动相应的Shell作业。
如果一切正常会在IDE的console看到作业运行的日志,也可以在“分片”标签看到执行的结果。(当然,前提是作业到点执行了)
下面是执行成功看到的日志:
[2017-12-13 17:17:25.119] [INFO] [Saturn-echoShellJob-2-thread-2] [com.vip.saturn.job.shell.ScriptJobRunner] >>> [echoShellJob] msg=echoShellJob-0: hello world
[2017-12-13 17:17:25.120] [INFO] [Saturn-echoShellJob-2-thread-2] [com.vip.saturn.venus.util.HemersCounter] >>> msg=reported event to herms, type:SATURN.EXECUTOR.FOR.NABOO, title:Job item stop, jobName is echoShellJob, item is 0, msg:executorName is executor_001, domain is yfb-saturn-executor.vip.vip.com
[2017-12-13 17:17:25.120] [INFO] [executor_001_echoShellJob-saturnQuartz-worker] [com.vip.saturn.job.basic.AbstractSaturnJob] >>> [echoShellJob] msg=echoShellJob finished, totalCost=24ms, return={0=SaturnJobReturn [returnCode=0, returnMsg=the exit value is 0, errorGroup=200, prop={}]}
下面是Console看到的结果:
至此,你的第一个Shell作业已经顺利开发完成!
3 集成Spring
从3.3.0版本开始支持该功能。
下载Demo工程 saturn-demo-spring
3.2.1 依赖saturn-spring
<dependency>
<groupId>com.vip.saturn</groupId>
<artifactId>saturn-spring</artifactId>
<!-- 修改成指定版本 -->
<version>master-SNAPSHOT</version>
</dependency>
3.2.2 配置saturn.properties
在classpath根目录下添加saturn.properties文件,添加app.class配置。
app.class=com.vip.saturn.job.spring.GenericSpringSaturnApplication
GenericSpringSaturnApplication将使用ClassPathXmlApplicationContext,加载applicationContext.xml文件来启动Spring。
3.2.3 自定义启动Spring
- 您可以通过编写GenericSpringSaturnApplication的子类,重写其方法,并配置app.class为该类,来达到自定义启动Spring的目的。
- 如果您想自定义启动加载的xml文件,那么您可以重写getConfigLocations()方法。
- 如果您想完全自定义启动Spring,那么您可以重写run()方法。
4 集成SpringBoot
从3.3.0版本开始支持该功能。
下载Demo工程 saturn-demo-springboot
4.2.1 依赖saturn-springboot
<dependency>
<groupId>com.vip.saturn</groupId>
<artifactId>saturn-springboot</artifactId>
<!-- 修改成指定版本 -->
<version>master-SNAPSHOT</version>
</dependency>
4.2.2 配置saturn.properties
在classpath根目录下添加saturn.properties文件,添加app.class配置。
app.class=com.vip.saturn.job.springboot.GenericSpringBootSaturnApplication
GenericSpringBootSaturnApplication将使用SpringApplication.run(source())来启动SpringBoot。
4.2.3 自定义启动SpringBoot
- 您可以通过编写GenericSpringBootSaturnApplication的子类,重写其方法,并配置app.class为该类,来达到自定义启动SpringBoot的目的。
- 如果您想自定义启动加载的source,那么您可以重写source()方法。
- 如果您想完全自定义启动SpringBoot,那么您可以重写run()方法。
5 嵌入式使用Saturn(不建议)
因为嵌入式使用Saturn,其打包方式、运行方式、运行jvm参数都依赖于工程的主框架(比如Spring、Tomcat等),造成Saturn ClassLoader不能与业务ClassLoader分离,从而带来的日志分离、包冲突等问题,而且导致Executor一键重启、自动升级等功能失效。所以,我们不建议使用嵌入式。
在此,介绍在Spring或SpringBoot环境中嵌入式使用Saturn,不再需要使用saturn-plugin插件,Saturn Executor的启动或停止依赖于Spring的启动或停止。
从3.3.0版本开始支持该功能。
下载Demo工程 saturn-demo-springboot-embedded
5.2.1 依赖saturn-embed-spring
<dependency>
<groupId>com.vip.saturn</groupId>
<artifactId>saturn-embed-spring</artifactId>
<!-- 修改成指定版本 -->
<version>master-SNAPSHOT</version>
</dependency>
5.2.2 注册EmbeddedSpringSaturnApplication
@Bean
public EmbeddedSpringSaturnApplication embeddedSpringSaturnApplication() {
EmbeddedSpringSaturnApplication embeddedSpringSaturnApplication = new EmbeddedSpringSaturnApplication();
embeddedSpringSaturnApplication.setIgnoreExceptions(false);
return embeddedSpringSaturnApplication;
}
以上例子是在SpringBoot环境中注册,如果Spring环境,您可以通过配置xml来注册该bean。
EmbeddedSpringSaturnApplication将监听Spring容器的ContextRefreshedEvent事件来启动Saturn Executor,监听ContextClosedEvent事件来优雅停止Saturn Executor。
其中,setIgnoreExceptions()方法,如果设置true,那么当启动或停止Executor时出现异常,将只打印Warn日志,不抛出异常,不影响Spring容器的运行;如果设置false,则不仅打印日志,而且会抛出异常,影响Spring容器的启动和停止。
创建作业
1 登录
使用浏览器访问 saturn.vip.vip.com。如果启用了登录功能(-Dauthentication.enabled=true),会被重定向到CAS进行身份认证。
为了获得最佳的使用体验,建议使用Chrome浏览器。
登录后会见到Saturn Home Page,如下:
用户需要在中央的搜索框输入你需要访问的域名。
首页上方的菜单栏功能如下:
- 作业管理:域搜索页面
- Dashboard:作业/Executor运行状况图表
- 告警中心:全域的告警大盘。
- 注册中心:域与ZK集群信息一览。
- 系统配置:系统参数设置。
如果启用了授权功能,由于权限的原因部分菜单你可能看不到。
2 作业总览
在Home page输入你的域名,然后点击进入。如果没有找到你的域名,请先添加域。
- 作业总览:如截图所示,显示域下所有作业及状态,同时提供一些操作。
- Executor总览:看到域下所有executor信息。
- 告警中心:列出该域相关的所有告警
- 作业名:作业名前面会根据不同的类型显示不同的图标。上面为例,0326shell为Shell作业,demoJavaJob为Java作业。
- 作业状态,描述如下:已就绪:作业已经启用,但是不在运行状态。如果设置了上报运行状态(非秒级作业默认上报),"已就绪"表示作业尚未到运行时间。如果没有上报运行状态,"已就绪"仅表示作业已被启用,并不知晓其是否正在运行。上报运行状态:Executor上报作业的运行状态开关。具体见下面的“详细作业设置”章节运行中:作业正在运行中。已停止:作业被停用,而且没有处于运行状态。停止中:作业被停用,但作业正处于运行中。运行完毕后会改为“已停止”状态。
- 作业分组:为了管理方便,可以对作业进行分组。如何分组将在“详细作业设置”描述。
- 分片情况:显示作业分片给多少个不同的executor,executor可以是容器,也可以是物理机。鼠标移至图标可以看到详细的executor name。
- 单个作业的禁用和复制操作:依次为禁用操作图标和复制操作图标。如果一个作业已经被启用,则你可以禁用它。要注意,禁用作业不代表作业会立即终止,默认情况下会等待此次执行完成,如果想立即终止,需要进入作业详细设置页面,点击“立即终止”。
- 作业操作按钮bar,依次为:批量启用:批量选择处于“已停止”状态的作业,进行启用。批量禁用:批量选择启用(包括处于已就绪和运行中状态)的作业,进行禁用。批量删除:批量删除处于“已停止”状态的作业。批量优先(Executor):如果你想选择特定的executor去运行你的作业,则需要设置优先executor。下拉框的候选项为当前域下的所有executor。注意,在优先executor(s)还是online的情况下,Saturn是不会安排作业运行到其他没有成为优先的executor中去,除非所有优先executor都offline。添加(单个作业):快速添加单个作业。导入(作业):预先将作业配置定义到excel中去(模板在弹出窗口中提供),然后利用此功能上载此excel完成批量导入。导出(作业):将余下所有作业的配置导出到excel中。Tips:如果希望把测试环境的作业全量转移到生产环境中去,只需要在测试环境导出一个excel,然后导入到生产环境即可。
- 搜索作业:按照作业名搜索你的作业。
- 异常作业总览:显示域下异常作业的数量,点击会进入告警中心。
- 单个作业的启用和删除操作:如果作业处于“已停止”状态,则可以通过启用按钮进行启用,或者使用“删除”功能进行删除。
3.添加你的作业
添加作业,有三种不同的方式:创建全新的作业,从xls导入你的作业,或者复制一个已有的作业。
3.1 创建全新的作业
点击作业总览里面的"添加"按钮,你可以添加不同类型的作业。当前支持2类作业:Java定时作业和Shell定时作业。
3.1.1 创建Java定时作业
- 作业名:全域唯一的作业名。
- 作业实现类:Java作业代码的实现类。
- 分片总数:同一作业可以分成多个分片进行并发调度。分片总数默认是1。
- cron表达式:基于Quartz的cron表达式,官方教程见这里 ,中文教程看这里。可以点击“预测”按钮检查自己的Cron是否正确。
- 分片参数:分片序列号和参数用等号分隔,多个键值对用逗号分隔 。分片序列号从0开始,不可大于或等于作业分片总数。如:0=a,1=b,2=c; 英文双引号请使用!!代替,英文等号请使用@@代替,英文逗号请使用##代替。如果作业所有分片无须参数,则只要保持值为0。例如有2个分片无须参数,则为“0=0”。 对于本地模式的作业,格式为*=value。关于本地模式的介绍,见“作业详细设置”章节。
3.1.2 创建Shell定时作业
Saturn对编程语言的支持理论上是没有限制的。对于非Java的作业,请使用Shell类型作业去进行构建。
Shell类型作业的参数基本上跟Java定时作业一致。下面是2个例子。
Shell script
如果你要运行一个名字为“helloworld.sh”的shell脚本,可以在分片参数中设置如下。其中,some_folder是你脚本在executor的目录。
0=/bin/sh some_folder/helloword.sh
Linux Command
0=echo 'hello world'
PHP
0=php helloworld.php
3.1.3 创建被动作业
注意,该功能请使用3.3.0及其以上版本。
- 被动作业用于作业编排。当上游作业执行成功,将触发下游作业立即执行一次。
- 只有被动作业才能配置上游作业。下游作业必须是被动作业。
- 上游作业不能为本地模式作业,并且分片数只能为1。
- 配置的上下游作业链,不能形成环。
3.2 导入作业
见“作业总览”章节的 “导入(作业)”和“导出(作业)”的介绍。
一种常见的使用场景是把不同环境之间的批量作业迁移。
3.3 复制作业
从现有作业复制出一个新的作业。
见“作业总览”章节的 “单个作业的禁用和复制操作”的介绍。
4.详细作业设置
点击作业设置,会看到更多的作业配置参数。
4.1 Java作业详细设置
- 自定义参数:在分片序列号/参数对照表中可作为alias形式引用,格式为{key1};作业实现类可以通过SaturnJobExecutionContext#getJobParameter方法获取。配置格式: 多个配置使用逗号分隔(key1=value1, key2=value2)。
- 优先Executor:如果你想选择特定的物理机executor去运行你的作业,则需要设置优先executor。下拉框的候选项为当前域下的所有在线的executor。注意,在优先executor(s)处于online的情况下,Saturn是不会安排作业运行到其他没有成为优先的executor中去,除非所有优先executor都offline。
- 只使用优先Executor:如果优先executor离线了,不会failover到其他机器。
- 本地模式:有一些定时任务(比如定时清理本机日志,定时更新本地配置等)要求能够定时执行,并且只能由一个进程(线程)执行;当不断有新机器加入时,新加入的机器可以自动参与定时执行;当有机器下线时,不需要其它机器来接管它的任务,不需要失败转移。这类任务(作业)往往与本地操作有关,我们之为本地模式的作业。
- 超时告警:超过此阈值则发送告警(告警只提供接口,每个使用者均需要自行实现告警逻辑)。0代表不设置(默认)。
- 超时强杀:超过此阈值则被强杀。0代表不设置(默认)。
- 所属分组:配置作业所属分组。在作业总览页可以根据分组来过滤。Executor启动时配置环境变量或-D参数VIP_SATURN_INIT_JOB_BY_GROUPS,来支持只启动属于相关分组的作业。
- 作业负荷:Saturn Executor 作业分片调度算法的核心思想是尽量保证全域的executor负荷平均。而Executor的负荷等于所有作业的分片乘以负荷的加权。简单来说,如果你希望作业占用更多的资源(Executor),则将次负荷设置为一个大的数字。
- 统计处理间隔:Executor周期性上报一些统计数据到Console,此设置项设置此周期的大小。
- 控制台输出日志:启用后所有作业打印到console的日志都会在这里显示。默认不启用。建议仅在作业调试时使用。因为大量日志会对ZK性能有影响。
- 上报运行状态:如果此功能启用,executor会将作业是否正在运行或已经运行完成的状态上报到ZK。对于定时作业(包括Java和Shell),如果调度频率高于5秒,则会默认上报,否则不上报。对于消息作业,默认不上报。
- 故障转移(failover):启用后,若作业在运行过程中出现executor突然掉线等异常情况,运行在该executor上的分片将会failover到其他executor上,等待下次调度时重新执行。下属情况不会failover失效:不上报运行状态的作业(如秒级作业)本地模式作业
- 过时未跑重试:提供一次性补偿机制,让过时未跑作业有重跑一次的机会。这个功能主要针对低频作业,调度频率在半天以上或者一次性执行作业可打开此选项。
- 下游作业:从3.3.0版本开始,用于作业编排。
- 暂停日期段:在此日期内作业不运行。支持多个日期段,逗号隔开。例如03/12-03/15,11/23-12/25。当日期为空,时间段不为空,表示每天那些时间段都暂停
- 暂停时间段:在此时间段内作业不运行。支持多个时间段,逗号隔开。例如12:23-13:23,16:00-17:00。当日期为不空,时间段为空,表示那些日期段24小时都暂停例子:如何设置在11/10日的19:50到20:30之间暂停作业,见下
4.2 Shell作业详细设置
描述与上面Java作业详细设置一致。
5. 启用作业
添加作业后,需要被启用才能被executor执行。
启用作业的方式有下面几种:
- 在作业预览页面批量启用或者启用单个作业,如下图:
- 在作业操作栏启用作业,如下图:
猜你喜欢
- 2024-10-25 SnailJob - 分布式任务重试与调度平台
- 2024-10-25 牛逼,超过 300 家公司使用的开源任务调度系统
- 2024-10-25 分布式任务调度框架 micro-job(分布式任务调度框架选型)
- 2024-10-25 分布式任务调度框架light-task-scheduler
- 2024-10-25 jobs 分布式任务调度平台(分布式任务调度原理)
- 2024-10-25 使用LTS帮你解决分布式任务调度问题!
- 2024-10-25 Python的分布式计算框架——Dask调度器简介
- 2024-10-25 分布式任务调度平台——XXLJob安装教程
- 2024-10-25 二、XXL-JOB分布式任务调度平台——本地/JAR/WAR包部署篇
- 2024-10-25 三千字带你搞懂XXL-JOB任务调度平台
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)