脚本任务

更新时间:
复制 MD 格式

脚本任务是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。

创建脚本任务

操作步骤

  1. 登录MSE XXL-JOB控制台,在顶部菜单栏选择地域

  2. 任务调度 > XXL-JOB页面,单击目标实例。

  3. 在左侧导航栏的应用管理,然后单击创建应用,应用类型选择普通应用,然后单击确定

  4. 接入执行器,推荐使用MSE自研的执行器,支持自定义变量、自定义返回结果等特性。

  5. 在左侧导航栏选择任务管理,然后单击创建任务

  6. 创建任务页面,选择关联应用,并完成相关配置任务信息。

    说明
    • 任务类型:根据脚本语言,选择对应的任务类型。

    • 脚本内容:此任务执行的脚本代码。

    • (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。仅可选择当前时间之后的日期。

  7. 单击完成

管理脚本任务

更新脚本

  1. 任务管理列表中,找到需要修改的任务。

  2. 运行模式列,单击编辑脚本

  3. 编辑脚本窗口中,修改脚本内容,单击确定

  4. 最新版本窗口中,输入版本名称,单击确定

历史版本对比

  1. 任务管理列表中,找到需要修改的任务。

  2. 运行模式列,单击编辑脚本

  3. 编辑脚本窗口中,开启版本对比

  4. 选择版本名称,查看历史版本与变更内容。

常见问题

未调用 XxlJobHelper.log() 时是否会生成日志文件?

不会。XXL-Job 客户端日志写入采用懒加载机制,只有当业务代码首次调用 XxlJobHelper.log() 时,才会初始化日志目录并创建日志文件。若任务执行过程中未显式调用该方法,且未通过其他日志框架将内容主动输出到 XXL-Job 指定路径,则不会打印任何隐藏日志,也不会生成日志文件。

任务执行报错 Read timed out 且超时时间为 3 秒,如何排查?

该错误通常由以下原因引起:

  • 网络抖动:调度中心向执行节点发起调度请求时,网络出现短暂抖动或连接中断,导致 3 秒内未收到响应。

  • 执行器负载过高:执行节点在问题时间点存在频繁 Full GC、CPU 飙升等情况,未能及时处理调度请求。

建议按以下步骤排查:

  1. 确认是否只有特定执行节点出现该错误,还是所有节点均受影响。

  2. 核查报错时间点该执行节点的监控指标,重点关注 GC 日志(是否有频繁 Full GC)、网络延迟及 CPU/内存使用率。

  3. 对比长耗时任务与短耗时任务的报错频率——若耗时极短的任务未受影响,问题更可能出在执行器负载或网络侧,而非任务业务逻辑本身。