--- name: cron-schedule description: 定时任务管理技能。用于创建、查看、管理定时任务和一次性提醒。激活当用户提到"提醒我"、"定时"、"cron任务"、"定时任务"等相关需求时。 --- # 定时任务管理 Skill ## 概述 本技能负责定时任务的**创建、查看、日志排查**。消息发送能力由 `lark-send-message-as-bot` 技能独立提供。 --- ## 配置文件位置 定时任务统一通过系统 crontab 管理: | 项目 | 位置 | |------|------| | **配置查看** | `crontab -l` | | **配置编辑** | `crontab -e` | | **配置文件存储** | `/var/spool/cron/crontabs/root` | | **系统执行日志** | `/var/log/syslog`(搜索 `CRON` 关键字) | > crontab 中按 Agent 分组,每个 Agent 的任务以注释块标注归属,通过 workspace 路径区分。 --- ## 两种定时任务方式 ### 方式一:系统 crontab(当前主要方式) 适用于需要执行复杂脚本的任务(SQL查询、生成报表、发送文件等)。 **创建任务:** ```bash # 编辑 crontab crontab -e # 添加一行,格式:分 时 日 月 周 命令 # 示例:每天9点执行脚本 0 9 * * * /bin/bash /root/.openclaw/workspace/scripts/my_task.sh >> /var/log/my_task.log 2>&1 ``` **强制规范:** 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` ### 方式二:openclaw cron(适用于简单提醒) 适用于一次性定时提醒和简单的周期性通知。 **一次性提醒:** ```bash openclaw cron add \ --at "2026-04-16T09:00:00+08:00" \ --name "提醒名称" \ --message "⏰ 提醒内容" \ --announce \ --channel feishu \ --to "user:" \ --tz Asia/Shanghai \ --delete-after-run ``` **周期性提醒:** ```bash openclaw cron add \ --cron "0 9 * * 1" \ --name "每周一提醒" \ --message "⏰ 提醒内容" \ --announce \ --channel feishu \ --to "user:" \ --tz Asia/Shanghai ``` > ⚠️ **注意**: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` 技能