脚本任务是XXL-JOB提供的一种在线脚本任务模式。该模式支持在MSE XXL-JOB控制台直接编写和发布多种语言的脚本,用于动态更新定时任务的业务逻辑,而无需重新部署应用。
脚本任务与BEAN任务对比
|
维度 |
脚本任务 |
BEAN任务 |
|
执行方式 |
fork子进程执行脚本。每次执行都会创建一个独立的进程,存在一定的系统开销。 |
线程内执行。任务作为JobHandler在执行器JVM的线程池中运行,资源共享,开销小。 |
|
资源开销 |
较高。每次执行任务时,执行器fork一个子进程执行脚本,因此相比BEAN任务,资源占用更多。 |
较低。共享执行器应用的JVM资源。 |
|
更新方式 |
在线更新,即时生效。在控制台编辑并保存脚本后即可生效,无需部署。 |
代码变更,重新部署。需要修改Java代码,打包并发布新的执行器应用版本。 |
|
开发效率 |
高。适合需要快速迭代和验证的场景。 |
较低。遵循标准的软件开发和发布流程。 |
|
推荐场景 |
任务调度不频繁的场景,如数据清理、报表生成、API集成等。 |
核心业务逻辑、高频调度任务、复杂计算等。 |
适用范围
-
引擎版本:MSE XXL-JOB版 v2.2.2 及以上版本。
-
支持的脚本语言:Java, Shell, Python, PHP, Node.js, PowerShell。
创建脚本任务
操作步骤
-
登录MSE XXL-JOB控制台,在顶部菜单栏选择地域。
-
在任务调度 > XXL-JOB版页面,单击目标实例。
-
在左侧导航栏的应用管理,然后单击创建应用,应用类型选择普通应用,然后单击确定。
-
接入执行器,推荐使用MSE自研的执行器,支持自定义变量、自定义返回结果等特性。
-
在左侧导航栏选择任务管理,然后单击创建任务。
-
在创建任务页面,选择关联应用,并完成相关配置任务信息。
-
任务类型:根据脚本语言,选择对应的任务类型。
-
脚本内容:此任务执行的脚本代码。
-
(Groovy 类型)输入:在文本框中填入 JSON 格式的字符串,例如
{"keys": ["v1", "v2"]}。参数以字符串形式传入脚本,需在@XxlJob注解的方法中显式声明String param入参,并使用 Jackson 等 JSON 库将其反序列化为目标对象(如Map<String, List<String>>)。若不声明和接收param参数,配置的参数值将无法被读取。 -
(Shell、Python、PHP、Node.js、PowerShell、CMD 类型)自定义参数:在结构化表格中添加参数,每条参数包含变量名、方向(输入/输出)、类型和值。
在定时配置步骤中,如需配置一次性任务:
-
时间类型:在下拉列表中选择一次性任务(one_time),页面将显示调度时间日期时间选择器,同时不显示 Cron 表达式输入框。
说明MSE XXL-JOB 中的 Cron 表达式(格式:秒 分 时 日 月 周 [年])仅适用于周期性任务调度。即使 Cron 格式支持年份字段,也无法通过设置 Cron 表达式来实现一次性执行。如需让任务只执行一次,必须将时间类型选为一次性任务(one_time)并配置调度时间。
-
调度时间:选择任务执行的具体时间,格式为
yyyy-MM-dd HH:mm:ss,例如2025-06-15 12:00:00。仅可选择当前时间之后的日期。
-
-
单击完成。
管理脚本任务
更新脚本
-
在任务管理列表中,找到需要修改的任务。
-
在运行模式列,单击编辑脚本。
-
在编辑脚本窗口中,修改脚本内容,单击确定。
-
在最新版本窗口中,输入版本名称,单击确定。
历史版本对比
-
在任务管理列表中,找到需要修改的任务。
-
在运行模式列,单击编辑脚本。
-
在编辑脚本窗口中,开启版本对比。
-
选择版本名称,查看历史版本与变更内容。
常见问题
未调用 XxlJobHelper.log() 时是否会生成日志文件?
不会。XXL-Job 客户端日志写入采用懒加载机制,只有当业务代码首次调用 XxlJobHelper.log() 时,才会初始化日志目录并创建日志文件。若任务执行过程中未显式调用该方法,且未通过其他日志框架将内容主动输出到 XXL-Job 指定路径,则不会打印任何隐藏日志,也不会生成日志文件。
任务执行报错 Read timed out 且超时时间为 3 秒,如何排查?
该错误通常由以下原因引起:
-
网络抖动:调度中心向执行节点发起调度请求时,网络出现短暂抖动或连接中断,导致 3 秒内未收到响应。
-
执行器负载过高:执行节点在问题时间点存在频繁 Full GC、CPU 飙升等情况,未能及时处理调度请求。
建议按以下步骤排查:
-
确认是否只有特定执行节点出现该错误,还是所有节点均受影响。
-
核查报错时间点该执行节点的监控指标,重点关注 GC 日志(是否有频繁 Full GC)、网络延迟及 CPU/内存使用率。
-
对比长耗时任务与短耗时任务的报错频率——若耗时极短的任务未受影响,问题更可能出在执行器负载或网络侧,而非任务业务逻辑本身。