Windows 分钟级定时任务(绕过 WorkBuddy 调度器限制)
适用场景
用户要求"每 N 分钟执行一次"的定时任务(如每 10 分钟推送热搜/行情/邮件检查)。
核心事实(2026-08 实测)
- WorkBuddy 自动化调度器 RRULE 只支持
DAILY / HOURLY / WEEKLY / MONTHLY / YEARLY FREQ=MINUTELY创建时直接报错Unsupported RRULE frequencyFREQ=HOURLY;BYMINUTE=0,10,20,30,40,50可创建,但 BYMINUTE 被忽略,next_run_at 全部被解析为"创建时间+1小时" → 每小时只触发 1 次- 结论:无法用 WorkBuddy 内置调度器实现分钟级,须用 Windows 任务计划程序 + 独立脚本
实施步骤
1. 编写独立脚本(Python)
脚本负责业务逻辑(抓数据/发消息),要求:
- 使用绝对路径调用解释器(用
python.exe完整路径,避免 PATH 差异) - 日志写入同目录
.log文件(便于事后验证运行次数) - 失败时能自通知(如发送错误消息)
2. 用 PowerShell 创建计划任务
关键参数:
$action = New-ScheduledTaskAction -Execute $python -Argument ('"{0}"' -f $script) -WorkingDirectory $workDir
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(1) -RepetitionInterval (New-TimeSpan -Minutes 10) -RepetitionDuration (New-TimeSpan -Days 365)
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -ExecutionTimeLimit (New-TimeSpan -Minutes 5) -MultipleInstances IgnoreNew
Register-ScheduledTask -TaskName 'MyTask' -Action $action -Trigger $trigger -Settings $settings -Force
已知坑:
- ⚠️
-RepetitionDuration ([TimeSpan]::MaxValue)报错:任务 XML 包含格式不正确或超出范围的值 (10,42):Duration:P99999999DT23H59M59S→ 必须用有限时长(如 365 天) - ⚠️ PowerShell 工具 stdout 可能被吞 → 用
*> $log重定向到文件再读取验证 - ⚠️ 某些环境里
schtasks等系统工具被安全策略禁用 → 改用 PowerShell 工具 - 用脚本文件(.ps1)而非内联命令,避免转义问题;写 ps1 时避免非 ASCII 路径
3. 验证
Get-ScheduledTask -TaskName X确认 State=Ready- 检查触发器:
Repetition Interval: PT10M、StartBoundary正确 - 等首次运行后看脚本日志:应出现对应时间戳的"开始/成功"记录
4. 清理 WorkBuddy 内置自动化
把原先创建的 WorkBuddy 自动化任务全部删除(automation_update mode=delete),避免每小时冗余触发。
飞书推送(lark-cli)要点
- shim(lark-cli.cmd)在 Git Bash 下路径转换崩溃(
c:\c\...)→ 直接调用:node.exe <lark-cli 安装目录>/node_modules/@larksuite/cli/scripts/run.js im +messages-send --user-id <ou_xxx> --text "<msg>" --as bot - 用户身份可能缺
im:message.send_as_user→ 用--as bot - Python subprocess 调 node 可能崩溃 → 用 subprocess 传参数列表(不经 shell)
其他定时场景参考
- 分钟级调度均可参考本方案(Windows 计划任务 + 独立脚本)
- 小时/天级调度可直接用 WorkBuddy 内置自动化
