Skip to content

Task Scheduler 功能介绍

Task Scheduler(任务计划程序)用于在 WSL 中自动化定期任务,避免重复性的手工维护操作。它提供了一个可视化的管理界面,让您无需记忆复杂的命令行参数即可创建和管理定时任务。

本功能示例场景:

  • 定时备份 WSL 中的发行版
  • 执行自定义脚本或命令

所有任务统一归集到Windows任务计划程序的 \WSLDashboard\UserTasks\ 路径下,方便集中查看和管理。您可以在界面中实时查看任务状态(就绪 / 运行中 / 已禁用)。

社区脚本仓库

您可以从下面的社区仓库下载示例脚本(备份发行版),快速上手:

https://github.com/owu/wsl-community

这是一个用户共建的代码仓库,欢迎您提交 Pull Request 来贡献脚本或分享最佳实践。

执行命令

命令配置

每个定时任务可以配置要执行的命令(脚本或可执行程序),支持以下选项:

配置项说明
执行命令要运行的脚本或可执行程序路径,支持 .bat, .ps1, .cmd, .exe, .py 等格式。可通过"浏览"按钮选择文件。
命令参数传递给命令的额外参数,可选。
管理员权限勾选后,任务将以最高权限运行,适用于需要 UAC 提权的操作。

任务操作

创建任务后,您可以对任务执行以下操作:

操作说明
立即运行强制触发任务立即执行,不受调度规则限制。
启用/禁用暂停或恢复任务的自动调度。
删除从任务计划程序中移除任务。

调度规则

Cron 表达式

任务调度采用标准的 5 字段 Cron 表达式来定义执行规则,格式如下:

分钟 小时 日 月 星期
字段取值范围说明
分钟0 - 59每小时的第几分钟执行
小时0 - 23每天的第几小时执行
1 - 31每月的第几天执行
1 - 12每年的第几个月执行
星期0 - 70 和 7 都表示星期日

每个字段支持以下语法:

  • * —— 匹配所有值(例如 * * * * * 表示每分钟执行一次)
  • */N —— 每隔 N 个单位执行一次(例如 */5 * * * * 表示每 5 分钟执行一次)
  • 单个数字 —— 匹配特定值(例如 0 9 * * 1 表示每周一上午 9:00 执行)

注意:不支持逗号分隔的多个值(如 1,15)和范围表达式(如 1-5),更多限制请参见下方的注意事项

支持的组合模式

本软件未运行原生的 Cron 守护进程,而是将 Cron 表达式翻译为 Windows 计划任务(schtasks.exe 的触发器参数。为了准确映射,解析器中仅硬编码支持以下 7 种组合模式,覆盖绝大多数定时任务场景:

#模式说明适用场景
1* * * * *每分钟执行监控类、实时检测类任务
2*/N * * * *每 N 分钟执行一次周期性检查任务
3M * * * *每小时的第 M 分钟执行(如 3 * * * *整点任务
4M H * * *每天的 H 点 M 分执行(如 0 3 * * *日常维护,如每天凌晨清理日志
5M H * * DOW每周特定星期几的 H 点 M 分执行(如 0 12 * * 1每周例行任务,如每周一备份数据
6M H D * *每月特定日期的 H 点 M 分执行月度任务,如每月 1 号生成报表
7M H D MON *每年特定月份和日期的 H 点 M 分执行年度任务,如指定某月执行

如果表达式不属于以上 7 种模式,系统将视为 Unsupported cron pattern 并拒绝创建。

注意事项

由于底层基于 Windows 计划任务实现,本软件的 Cron 解析器与标准 Linux Cron 存在以下差异:

1. 不支持列表(,)和范围(-

标准 Cron 允许通过逗号定义多个离散的时间点(如 1,15,30 * * * * 表示第 1、15、30 分钟),或通过连字符定义范围(如 1-5 * * * * 表示第 1 到 5 分钟)。

本软件的限制: 每个字段只能填写单个数字星号(*步长(*/N,不支持逗号和连字符。

2. 不支持自由组合

标准 Cron 允许任意字段的自由组合(如 * 3 * * * 表示每天凌晨 3 点这个小时内的每一分钟),但本软件仅支持上方列出的 7 种固定模式,不在此范围内的表达式将被拒绝。

3. 步长模式的时间对齐差异

在标准 Cron 中,*/5 * * * * 严格对齐到时钟的 0、5、10、15... 分钟。本软件将其翻译为 Windows 的 /SC MINUTE /MO 5 参数,Windows 的处理逻辑是从任务创建或启用那一刻起计算间隔

例如,如果您在 10:02 保存并启用了每 5 分钟运行一次的任务,它将在 10:07 首次执行,接着是 10:12,而非对齐到标准时钟的 10:05