Install
openclaw skills install @thcjp/cron-guard定时守护为无人值守的 cron 作业与后台任务提供可靠性护栏。它把"在 cron 里跑一行 bash"的高危模式,改造为"脚本优先、环境确定、静默成功"的工程化模式,覆盖 shell 引用陷阱、命令替换意外、cwd/env 漂移、SIGPIPE 误报、git 推送冲突等高频故障。 核心能力:脚本优先原则、确定环境...
openclaw skills install @thcjp/cron-guardcron 作业的失败很少是"逻辑 bug",多半是 shell 引用炸了、环境漂移了、管道误报了。本技能用"脚本优先 + 确定环境 + 静默成功"三原则,把这些无聊但致命的坑堵死.
禁止在cron里写多行bash -lc '..',把逻辑放进仓库脚本(tools/<job>.py),cron只跑一行短命令,避免引用地狱。使用input_params参数支持创建/查询/导出操作。
显式确定cwd(cd "$(dirname "$0")/.")、PATH(不依赖.bashrc)、文档化必需环境变量(: "${API_KEY:?未设置}"),解决"本地能跑cron里失败"。
成功时输出NO_REPLY(或空),只在失败时输出ALERT到stderr,避免每次成功都发通知淹没用户。
8种高频故障(EOF引号错误/SIGPIPE误报/cwd漂移/git push被拒/Python -c陷阱/Windows路径/临时文件残留/并发冲突)附修复模板。
POSIX(bash/sh)与Windows(PowerShell)等效模式对照表,覆盖三大平台。
10项检查清单(逻辑在脚本/cwd确定/变量校验/PATH设置/静默成功/trap清理/文件锁/无force-push等)+ 本地cron环境模拟测试。
何时使用: 编写或加固cron作业、定时任务脚本;后台无人值守脚本需提升可靠性;Agent长驻守护脚本的健康检查与告警;跨平台定时作业编写;CI定时任务与调度系统的被调度脚本
不适用场景: 调度系统本身的配置(时区/并发/熔断,由"定时调度专家"负责);非定时一次性脚本;纯业务逻辑bug修复(本skill聚焦环境与shell陷阱)
| 方法/模式 | 关键参数 | 说明 |
|---|---|---|
| 脚本提取 | tools/<job>.py或tools/<job>.sh | cron多行逻辑移入脚本,cron只跑python3 tools/<job>.py |
| 确定cwd/env | cd "$(dirname "$0")/.", : "${VAR:?未设置}" | 脚本开头确定cwd、显式设置PATH、校验环境变量 |
| 静默成功 | echo "NO_REPLY"(成功), echo "ALERT" >&2(失败) | 精确输出NO_REPLY,失败时告警到stderr |
| trap清理 | trap 'rm -f "$TMPFILE"' EXIT | 退出时清理临时文件 |
| 文件锁 | flock -n 200或PowerShell Mutex | 防止周期任务并发执行 |
| 本地模拟 | env -i HOME="$HOME" PATH="..." bash -c '...' | 模拟cron最小环境测试 |
典型流程: 逻辑进脚本→确定cwd/env→实现静默成功→添加trap清理与文件锁→上线前预检→本地模拟cron环境测试。跨平台用uname -s检测平台跑对应脚本,Windows用PowerShell等效模式。
{
"input": "定时任务脚本路径或命令",
"options": {
"mode": "create|query|export",
"silent_success": true,
"lock_file": "/tmp/cron-guard.lock"
}
}
{
"success": true,
"result": "NO_REPLY",
"metadata": {
"exit_code": 0,
"duration_ms": 150,
"locked": true
}
}
| 场景 | 原因 | 处理方式 |
|---|---|---|
unexpected EOF | $(..)未闭合或bash -lc嵌套引号断裂 | 把多行shell替换为脚本,cron只跑python3 tools/<job>.py |
| 本地能跑cron里失败 | cwd不同、PATH不同、环境变量缺失 | 脚本内cd到仓库、显式设置PATH、文档化并校验环境变量 |
git push被拒(non-fast-forward) | 远程有新提交,本地推送冲突 | fetch后rebase再推送;禁止git push --force |
| 临时文件残留导致冲突 | 脚本中断后临时文件未清理 | 用trap 'rm -f "$TMPFILE"' EXIT确保退出时清理 |
| 周期任务重叠数据冲突 | 上一轮未跑完下一轮就启动 | 用flock -n文件锁防并发,获取不到锁则静默跳过 |
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| bash或PowerShell | Shell | 必需 | 系统自带 |
| Agent LLM | API | 必需 | 由Agent内置LLM提供 |
| python3 | 运行时 | 推荐(脚本载体) | 系统自带或python.org |
| flock | CLI | Linux/Mac推荐(文件锁) | util-linux自带 |
| curl | CLI | 可选(健康检查) | 系统自带 |
运行环境: Linux/macOS(POSIX)/Windows(PowerShell),bash 4+/sh/PowerShell 5+。本技能无需API Key;被守护脚本可能需外部API Key,必须通过环境变量引用并文档化,禁止硬编码。
可用性分类: MD+EXEC模式Markdown指南 + 脚本执行),Agent据此编写/审查cron脚本,实际执行由调度系统调用脚本
#!/usr/bin/env bash
set -euo pipefail
# 确定环境
cd "$(dirname "$0")/."
: "${API_KEY:?未设置API_KEY环境变量}"
export PATH="/usr/local/bin:/usr/bin:/bin"
# 文件锁防并发
exec 200>/tmp/cron-guard.lock
flock -n 200 || { echo "ALERT: 另一个实例正在运行" >&2; exit 0; }
# 静默成功约定
TMPFILE=$(mktemp)
trap 'rm -f "$TMPFILE"' EXIT
# 主逻辑
if python3 tools/job.py --input "$1" 2>"$TMPFILE"; then
echo "NO_REPLY"
else
echo "ALERT: 任务失败" >&2
cat "$TMPFILE" >&2
exit 1
fi
# cron-guard PowerShell 模式
$ErrorActionPreference = "Stop"
Set-Location -Path $PSScriptRoot
# 环境变量校验
if (-not $env:API_KEY) {
Write-Error "未设置API_KEY环境变量"
exit 1
}
# Mutex 防并发
$mutex = New-Object System.Threading.Mutex($false, "Global\cron-guard")
if (-not $mutex.WaitOne(0, $false)) {
Write-Output "NO_REPLY"
exit 0
}
# 静默成功
try {
python3 tools/job.py --input $args[0]
Write-Output "NO_REPLY"
} catch {
Write-Error "ALERT: 任务失败 - $_"
exit 1
} finally {
$mutex.ReleaseMutex()
}
# 每5分钟执行,静默成功,失败时告警
*/5 * * * * cd /opt/app && ./tools/cron-guard.sh >> /var/log/cron-guard.log 2>&1
# 每日凌晨备份,使用文件锁防重叠
0 2 * * * cd /opt/app && flock -n /tmp/backup.lock python3 tools/backup.py
Q: NO_REPLY必须精确匹配吗?
A: 是的,精确输出NO_REPLY(大写、无多余空格)。许多平台视为"静默成功"(不触发人工通知)。若平台不识别,等效于"成功时无输出"。
Q: pipefail到底该不该用?
A: 该用,但要注意| head场景。set -euo pipefail是好习惯,遇到SIGPIPE误报时局部|| true或改用脚本读取。
Q: force-push真的完全禁止吗? A: 自动化脚本里禁止。cron作业绝不能force-push,会覆盖他人提交。被拒后用fetch+rebase重试。
| 风险类型 | 防范措施 |
|---|---|
| API密钥泄露 | 通过环境变量传入,不在代码中硬编码 |
| 命令执行风险 | 限定执行预批准命令,不拼接用户输入到参数中 |
| 网络通信安全 | 通过HTTPS安全通信,验证证书有效性 |
| 敏感数据暴露 | 返回内容不包含敏感凭证 |
使用前请确认已阅读依赖说明章节,确保运行环境满足安全要求。
| 操作场景 | 手动耗时 | 自动化耗时 | 效率提升 |
|---|---|---|---|
| 文件解析与提取 | 5-10分钟/个 | <5秒/个 | 60-120x |
| 批量文件处理(100个) | 8-16小时 | <5分钟 | 96-192x |
| API调用与响应解析 | 2-3分钟/次 | <1秒/次 | 120-180x |
| 多接口数据聚合 | 15-30分钟 | <10秒 | 90-180x |
| 命令执行与结果收集 | 3-5分钟/次 | <2秒/次 | 90-150x |
| 重复任务批量执行 | 因任务而异 | 线性缩减 | 5-50x |
| 错误排查与修复 | 10-30分钟 | <30秒 | 20-60x |
| 对比维度 | 定时守护 | 传统手动方式 | 通用脚本工具 |
|---|---|---|---|
| 自动化程度 | 全流程自动 | 完全手动 | 部分自动 |
| 错误处理 | 内置错误恢复 | 依赖人工经验 | 基本try-catch |
| 可复用性 | 参数化配置 | 一次性脚本 | 模板化 |
| 安全合规 | 内置安全检查 | 无安全保障 | 无安全保障 |
| 适用场景 | cron 作业可靠性护栏,脚本优先、确定环境、静默成功,跨平台故障模式一网打尽. | 通用场景 | 通用场景 |
定时守护为cron作业与后台任务提供可
A1: cron 作业可靠性护栏,脚本优先、确定环境、静默成功,跨平台故障模式一网打尽. 定时守护为cron作业与后台任务提供可靠性护栏,遵循脚本优先、确定环境、静默成。支持文本指令和结构化参数输入,具体格式参考使用流程章节。
A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。
A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。
针对定时守护使用中可能遇到的常见问题,提供以下排查方案:
| 错误类型 | 原因分析 | 解决方案 |
|---|---|---|
| API认证失败(401) | API密钥错误或过期 | 检查密钥配置,重新生成token |
| 接口限流(429) | 请求频率超出限制 | 降低调用频率,启用重试退避策略 |
| 响应超时(504) | 网络延迟或服务端负载过高 | 增加超时阈值,检查网络连接 |
| 文件不存在 | 路径错误或文件未创建 | 检查路径拼写,确认文件已生成 |
| 文件格式不支持 | 扩展名不在支持列表中 | 转换为支持的格式后重试 |
| 权限不足 | 当前用户无读写权限 | 检查文件权限,以管理员身份运行 |
| 命令执行失败 | 参数错误或环境依赖缺失 | 检查命令语法,确认依赖已安装 |
| 进程超时 | 命令执行时间过长 | 增加超时设置,优化命令参数 |
| 网络连接失败 | DNS解析失败或防火墙拦截 | 检查网络配置,确认代理设置 |