From 456630185bddce297eed481f503b542cf1c7e187 Mon Sep 17 00:00:00 2001 From: ai_member_only Date: Wed, 15 Apr 2026 18:58:37 +0800 Subject: [PATCH] =?UTF-8?q?agent=E5=8C=BA=E5=88=86=20=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=AE=BE=E7=BD=AE=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SKILL.md | 252 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 201 insertions(+), 51 deletions(-) diff --git a/SKILL.md b/SKILL.md index 22b1c1b..39ede23 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,67 +1,217 @@ --- name: cron-schedule -description: 定时任务/提醒设置,支持一次性定时提醒和周期性cron任务。激活当用户提到"提醒我"、"定时"、"cron任务"、"多久之后通知我"等相关需求时。 +description: 定时任务管理技能。用于创建、查看、管理定时任务和一次性提醒。激活当用户提到"提醒我"、"定时"、"cron任务"、"定时任务"等相关需求时。 --- -# 定时任务设置Skill -用于快速创建定时提醒、周期性自动化任务。 +# 定时任务管理 Skill -## 激活场景 -当用户提出以下需求时自动触发使用该Skill: -- "XX分钟/小时/天后提醒我XX" -- "每天/每周X XX点提醒我XX" -- "设置定时任务" -- "创建cron任务" -- "帮我加个提醒" +## 概述 -## 使用方法 -### 1. 一次性定时提醒(执行后自动删除) -**参数规则:** -- 延迟时间:支持两种写法: - - 相对时间:`+30m`、`+2h`、`+1d`(分别对应30分钟、2小时、1天) - - 绝对时间:ISO格式时间字符串,例如`2026-03-14T09:26:44+0800` -- 提醒内容:需要通知用户的具体消息,统一前缀为`⏰ ` -- 通知对象:支持基于飞书user_id发送,格式为`user:<用户user_id>`,用户user_id可从员工列表文档查询获取 +本技能负责定时任务的**创建、查看、日志排查**。消息发送能力由 `lark-send-message-as-bot` 技能独立提供。 -**示例:** -用户需求:"30分钟后提醒我开会" -执行命令: +--- + +## 配置文件位置 + +定时任务统一通过系统 crontab 管理: + +| 项目 | 位置 | +|------|------| +| **配置查看** | `crontab -l` | +| **配置编辑** | `crontab -e` | +| **配置文件存储** | `/var/spool/cron/crontabs/root` | +| **系统执行日志** | `/var/log/syslog`(搜索 `CRON` 关键字) | + +> crontab 中按 Agent 分组,每个 Agent 的任务以注释块标注归属,通过 workspace 路径区分。 + +--- + +## 两种定时任务方式 + +### 方式一:系统 crontab(当前主要方式) + +适用于需要执行复杂脚本的任务(SQL查询、生成报表、发送文件等)。 + +**创建任务:** ```bash -openclaw cron add --at +30m --name "30分钟后开会提醒" --message "⏰ 提醒:时间到了,该去开会啦!" --announce --channel feishu --to user:<用户user_id> --tz Asia/Shanghai --delete-after-run +# 编辑 crontab +crontab -e + +# 添加一行,格式:分 时 日 月 周 命令 +# 示例:每天9点执行脚本 +0 9 * * * /bin/bash /root/.openclaw/workspace/scripts/my_task.sh >> /var/log/my_task.log 2>&1 ``` -### 2. 周期性定时任务(重复执行) -**参数规则:** -- cron表达式:标准cron格式 `分 时 日 月 周`,例如`0 8 * * *`表示每天8点 -- 任务名称:便于识别的任务标识 -- 执行内容/提醒消息:需要执行的操作或通知内容,统一前缀为`⏰ ` -- 通知对象:支持基于飞书user_id发送,格式为`user:<用户user_id>`,用户user_id可从员工列表文档查询获取 +**强制规范:** +1. **必须重定向日志**:所有任务必须添加 `>> /path/to/log 2>&1`,否则执行失败无法排查 +2. **必须使用绝对路径**:脚本路径、命令路径都用绝对路径 +3. **必须指定环境变量**:脚本开头添加 `export PATH=/root/.nvm/versions/node/v24.14.0/bin:$PATH` +4. **日志位置规范**: + - 通用日志放 `/var/log/<任务名>.log` + - agent 专属日志放 `/logs/<任务名>.log` -**示例:** -用户需求:"每天早上8点提醒我备份数据" -执行命令: +### 方式二:openclaw cron(适用于简单提醒) + +适用于一次性定时提醒和简单的周期性通知。 + +**一次性提醒:** ```bash -openclaw cron add --cron "0 8 * * *" --name "每日8点数据备份提醒" --message "⏰ 每日提醒:请执行当日数据备份操作~" --announce --channel feishu --to user:<用户user_id> --tz Asia/Shanghai +openclaw cron add \ + --at "2026-04-16T09:00:00+08:00" \ + --name "提醒名称" \ + --message "⏰ 提醒内容" \ + --announce \ + --channel feishu \ + --to "user:" \ + --tz Asia/Shanghai \ + --delete-after-run ``` -## 强制规则(必须遵守) -1. 飞书消息通知支持基于用户user_id发送,格式为`user:<用户user_id>`,用户user_id可从`/root/.openclaw/skills/lark-send-message-as-bot/vala_users_list.md`查询获取 -2. 时区强制指定为`Asia/Shanghai`,避免时间计算错误 -3. 一次性提醒必须加`--delete-after-run`参数,执行后自动清理过期任务 -4. 创建任务完成后必须按固定格式回复用户: +**周期性提醒:** +```bash +openclaw cron add \ + --cron "0 9 * * 1" \ + --name "每周一提醒" \ + --message "⏰ 提醒内容" \ + --announce \ + --channel feishu \ + --to "user:" \ + --tz Asia/Shanghai ``` -✅ 定时任务已创建成功! -- 任务ID:`{任务ID}` -- 触发时间:{本地时间}({时间说明,如"10分钟后"、"每天8点"}) -- 通知对象:{用户姓名/标识} -- 通知内容:`{通知消息}` -- 执行后自动删除:{是/否} -``` -5. 不允许创建执行破坏性操作的定时任务 -6. 通知消息统一使用`⏰ `开头,保持格式一致 -## 任务管理常用命令 -- 查看所有定时任务:`openclaw cron list` -- 删除指定任务:`openclaw cron rm <任务ID>` -- 手动执行验证任务:`openclaw cron run <任务ID>` -- 查看任务执行状态:`openclaw cron status <任务ID>` +> ⚠️ **注意**:openclaw cron 的 `--to` 参数要求飞书 `open_id`(`ou_xxx` 格式),不支持 `user_id`。 +> 如果需要用 `user_id` 发送消息或发送文件,请使用方式一(crontab + 脚本),脚本中参考 `lark-send-message-as-bot` 技能。 + +--- + +## 查看当前 agent 的定时任务 + +### 查看系统 crontab 中的任务 + +```bash +# 查看所有定时任务 +crontab -l + +# 只看当前 agent 的任务(按 workspace 路径过滤) +crontab -l | grep "workspace/" # 小溪的任务 +crontab -l | grep "workspace-xiaoban" # 小伴的任务 +crontab -l | grep "workspace-xiaokui" # 小葵的任务 +crontab -l | grep "workspace-xiaobian" # 小编的任务 +crontab -l | grep "workspace-xiaoyan" # 小燕的任务 +``` + +### 查看 openclaw cron 中的任务 + +```bash +openclaw cron list # 查看所有 enabled 的任务 +openclaw cron list --json # JSON 格式(含详细状态) +``` + +### Agent 与 Workspace 对照表 + +| Agent | Workspace 路径 | 脚本目录 | +|-------|---------------|---------| +| 小溪 xiaoxi | `/root/.openclaw/workspace/` | `scripts/` | +| 小伴 xiaoban | `/root/.openclaw/workspace-xiaoban/` | `scripts/` | +| 小编 xiaobian | `/root/.openclaw/workspace-xiaobian/` | `scripts/` | +| 小葵 xiaokui | `/root/.openclaw/workspace-xiaokui/` | `scripts/` | +| 小燕 xiaoyan | `/root/.openclaw/workspace-xiaoyan/` | `scripts/` | + +--- + +## 日志排查 + +### crontab 任务日志 + +```bash +# 查看具体任务的日志(路径在 crontab 配置中指定) +tail -50 /var/log/<任务名>.log + +# 查看系统 cron 执行日志(确认任务是否被触发) +grep CRON /var/log/syslog | tail -20 +``` + +### openclaw cron 执行历史 + +```bash +# 查看指定任务的执行历史 +openclaw cron runs --id "<任务ID>" + +# 查看调度器状态 +openclaw cron status +``` + +--- + +## 脚本模板 + +### 标准定时任务脚本模板 + +```bash +#!/bin/bash +# 任务名称:<描述> +# 执行时间: +# 归属 Agent: + +set -e + +# 1. 环境配置 +export PATH=/root/.nvm/versions/node/v24.14.0/bin:$PATH +LOG_FILE="/var/log/<任务名>.log" + +log() { + echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE" +} + +log "任务开始执行" + +# 2. 业务逻辑 +# ... 在这里写具体的业务操作 ... + +# 3. 发送通知(参考 lark-send-message-as-bot 技能) +# 获取 token +APP_ID=$(jq -r '.apps[0].appId' /root/.openclaw/credentials//config.json) +APP_SECRET=$(jq -r '.apps[0].appSecret' /root/.openclaw/credentials//config.json) +TOKEN=$(curl -s -X POST "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" \ + -H "Content-Type: application/json" \ + -d "{\"app_id\":\"$APP_ID\",\"app_secret\":\"$APP_SECRET\"}" \ + | jq -r '.tenant_access_token') + +# 发送消息(选择 user_id 或 chat_id) +curl -s -X POST "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=user_id" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{ + "receive_id": "", + "msg_type": "text", + "content": "{\"text\":\"✅ 任务执行完成\"}" + }' > /dev/null 2>&1 + +log "任务执行完成" +exit 0 +``` + +--- + +## openclaw cron 管理命令 + +| 命令 | 用途 | +|------|------| +| `openclaw cron list` | 查看所有启用的任务 | +| `openclaw cron list --json` | JSON 格式查看(含状态) | +| `openclaw cron add ...` | 创建任务 | +| `openclaw cron rm ` | 删除任务 | +| `openclaw cron enable ` | 启用任务 | +| `openclaw cron disable ` | 禁用任务 | +| `openclaw cron run ` | 手动执行(调试用) | +| `openclaw cron runs --id ` | 查看执行历史 | +| `openclaw cron status` | 查看调度器状态 | + +--- + +## 安全规则 + +1. **时区**:统一使用 `Asia/Shanghai` +2. **一次性任务**:必须加 `--delete-after-run`,避免过期任务堆积 +3. **禁止破坏性操作**:不允许创建执行删除数据、修改配置等危险操作的定时任务 +4. **消息发送**:涉及飞书消息和文件发送时,参考 `lark-send-message-as-bot` 技能