Skip to content

第四章 自動化任務入門

前提:本章假設你已完成第一章的安裝配置。定時任務的通知功能需要配合第三章的消息渠道(飛書/Telegram/QQ),但不是必須的——沒有配置渠道時,任務仍會執行,只是結果只能在 Web 控制面板查看。

OpenClaw 的定時任務(Cron)功能讓 AI 可以主動工作,而不是被動等待你的指令。你可以讓它每天早上發送簡報,每小時檢查服務器狀態,或者每週生成工作總結。這些任務會在 Gateway 中持久化存儲,即使重啓也不會丟失。

1. 什麼是 OpenClaw Cron

OpenClaw Cron 不是傳統的 Linux cron,而是一個讓 AI 按時間表主動執行任務的系統。它運行在 Gateway 中,支持三種調度方式:

  • at(一次性):在指定時間執行一次
  • every(固定間隔):每隔一段時間執行
  • cron(表達式):使用 cron 表達式精確控制(如 0 8 * * * 表示每天早上 8 點,格式爲"分 時 日 月 周")

任務可以在主會話中執行,也可以在獨立會話中運行(推薦),避免干擾正常對話。

2. 創建定時任務

2.1 通過對話創建

最簡單的方式是直接告訴 OpenClaw:

每天早上 8 點給我發送今日簡報,包括天氣、日程和重要郵件

OpenClaw 會自動創建定時任務並保存。你可以用自然語言描述任務,它會理解並配置。

2.2 使用命令行

bash
# 添加定時任務(--name 必填,--channel 指定發送目標)
openclaw cron add --name "每日簡報" --cron "30 7 * * *" --message "發送今日簡報" --channel "telegram:chat:123456789"

# 添加間隔任務
openclaw cron add --name "健康檢查" --every 10m --message "檢查服務器狀態" --channel "qqbot:c2c:your_openid"

# 添加一次性任務(20 分鐘後執行)
openclaw cron add --name "提醒我" --at 20m --message "該休息了" --channel "telegram:chat:123456789"

# 查看所有任務
openclaw cron list

# 編輯任務
openclaw cron edit <jobId>

# 刪除任務
openclaw cron rm <jobId>

爲什麼需要 --channel 定時任務是 OpenClaw 主動推送的——它需要知道把結果發到哪裏。這和你在 QQ/Telegram 裏跟機器人聊天不同:聊天時機器人知道該回復誰(被動響應),但定時任務沒有"發起者",所以必須用 --channel 明確指定發送目標。

--channel 格式

  • Telegram 私聊:telegram:chat:<你的ChatID>(首次配對時機器人會告訴你 Chat ID,詳見第三章 3.3 配對驗證
  • QQ 私聊:qqbot:c2c:<openid>
  • QQ 羣聊:qqbot:group:<groupid>

如果不指定 --channel,任務仍會執行,但結果只能在 Web 控制面板(openclaw dashboard)中查看,不會推送到任何聊天渠道。

其他常用選項--cron 設置 cron 表達式(如 "30 7 * * *" 表示每天 7:30),--every 設置間隔(如 10m1h),--at 設置一次性定時(如 20m 或 ISO 時間),--announce 將結果發送到聊天。完整選項運行 openclaw cron add --help 查看。

3. 實戰案例

3.1 每日簡報

每天早上 7:30 給我發送今日簡報到 Telegram:
1. 北京天氣和空氣質量
2. 今天的日曆事件
3. 未讀郵件數量
4. GitHub 上的新通知

OpenClaw 會創建一個獨立會話的定時任務,每天準時執行。

3.2 服務器監控

每 10 分鐘檢查服務器狀態,如果 CPU 超過 90% 或內存超過 85% 就發送告警到飛書

這比傳統監控更靈活,你可以隨時調整閾值和告警規則。

3.3 週報生成

每週五下午 5 點生成本週工作總結:
- 統計 Git 提交次數和代碼行數
- 列出完成的 Jira 任務
- 生成 Markdown 格式週報
- 發送到飛書工作羣

3.4 數據備份

每天凌晨 2 點備份數據庫到 S3,完成後通知我

3.5 定期清理

每週日凌晨 3 點清理 30 天前的日誌文件,保留錯誤日誌

4. 高級配置

定時任務的兩層配置

  • 全局設置openclaw.jsoncron 字段中,控制是否啓用、最大併發數等:
    json
    {
      "cron": {
        "enabled": true,
        "maxConcurrentRuns": 2
      }
    }
  • 具體任務通過 CLI(openclaw cron add --name "任務名" --cron "表達式" --message "內容")或對話創建,由 Gateway 存儲在 ~/.openclaw/cron/jobs.json 中。手動編輯該文件需要先停止 Gateway。

下面的 JSON 示例展示的是 jobs.json 中的任務定義格式,僅供理解參考,推薦通過對話或 CLI 創建任務

展開:高級配置(條件執行、任務鏈、環境變量、錯誤處理)

4.1 條件執行

有時你希望任務只在特定條件下執行。可以在 prompt 中添加判斷邏輯:

json
// jobs.json 任務定義格式(推薦通過 CLI 或對話創建)
{
  "cron": {
    "jobs": [
      {
        "name": "disk_alert",
        "schedule": "*/30 * * * *",
        "prompt": "檢查磁盤使用率,如果超過 80% 就發送告警到 Telegram,否則不做任何操作",
        "enabled": true
      }
    ]
  }
}

OpenClaw 會智能地理解這個條件,只有在磁盤使用率超過 80% 時纔會發送消息。這比傳統的腳本更靈活,因爲你不需要寫 if-else 邏輯,只需要用自然語言描述條件即可。

你還可以設置更復雜的條件:

json
{
  "cron": {
    "jobs": [
      {
        "name": "smart_backup",
        "schedule": "0 2 * * *",
        "prompt": "檢查數據庫大小,如果超過 1GB 就執行完整備份,否則只備份增量數據。備份完成後,如果是工作日就發送通知到飛書,如果是週末就發送到 Telegram",
        "enabled": true
      }
    ]
  }
}

4.2 任務鏈

多個任務可以組合成工作流:

json
{
  "cron": {
    "jobs": [
      {
        "name": "weekly_report",
        "schedule": "0 17 * * 5",
        "prompt": "1. 讀取本週 Git 提交記錄\n2. 從 Jira 獲取已完成任務\n3. 生成 Markdown 格式週報\n4. 發送到飛書工作羣",
        "enabled": true
      }
    ]
  }
}

OpenClaw 會按順序執行每個步驟,前一步的結果會傳遞給下一步。如果某一步失敗,後續步驟會自動跳過,並記錄失敗原因。

你也可以設置任務依賴關係:

json
{
  "cron": {
    "jobs": [
      {
        "name": "backup_db",
        "schedule": "0 2 * * *",
        "prompt": "備份數據庫到本地",
        "enabled": true
      },
      {
        "name": "upload_backup",
        "schedule": "0 3 * * *",
        "depends_on": "backup_db",
        "prompt": "將備份文件上傳到雲存儲",
        "enabled": true
      }
    ]
  }
}

這樣 upload_backup 只有在 backup_db 成功執行後纔會運行。

4.3 環境變量

如果任務需要訪問外部服務,可以在配置中設置環境變量:

json
{
  "cron": {
    "jobs": [
      {
        "name": "backup_db",
        "schedule": "0 2 * * *",
        "env": {
          "DB_HOST": "localhost",
          "DB_NAME": "myapp",
          "S3_BUCKET": "my-backups"
        },
        "prompt": "備份數據庫到 S3:\n1. 使用 mysqldump 導出數據庫\n2. 壓縮文件\n3. 上傳到 S3\n4. 刪除本地臨時文件",
        "enabled": true
      }
    ]
  }
}

環境變量會在任務執行時注入到 OpenClaw 的運行環境中。這樣可以避免在 prompt 中硬編碼敏感信息,也方便在不同環境(開發、測試、生產)使用不同的配置。

你還可以在全局配置中設置通用的環境變量:

json
{
  "cron": {
    "global_env": {
      "TIMEZONE": "Asia/Shanghai",
      "NOTIFICATION_CHANNEL": "telegram"
    },
    "jobs": [
      {
        "name": "morning_brief",
        "schedule": "0 8 * * *",
        "prompt": "生成今日簡報併發送到 ${NOTIFICATION_CHANNEL}",
        "enabled": true
      }
    ]
  }
}

4.4 錯誤處理和重試

定時任務可能因爲網絡問題、服務不可用等原因失敗。你可以配置重試策略:

json
{
  "cron": {
    "jobs": [
      {
        "name": "api_sync",
        "schedule": "0 */1 * * *",
        "prompt": "從 API 同步數據到本地數據庫",
        "retry": {
          "max_attempts": 3,
          "delay": 60
        },
        "on_failure": {
          "notify": true,
          "channel": "telegram"
        },
        "enabled": true
      }
    ]
  }
}

如果任務失敗,OpenClaw 會等待 60 秒後重試,最多重試 3 次。如果所有重試都失敗,會發送通知到 Telegram。

5. 管理定時任務

5.1 查看任務狀態

bash
openclaw cron list

會顯示所有任務的 ID、名稱、調度方式、下次/上次執行時間、狀態等信息:

openclaw cron list 終端輸出

字段說明ID 是任務唯一標識(後續管理任務時會用到),Schedule 顯示調度類型和參數,Next 是距下次執行的時間,Statusidle(空閒等待中)或 running(正在執行)。

查看某個任務的執行歷史(需要指定任務 ID,可從 cron list 獲取):

bash
# 查看任務的執行歷史(--id 爲任務 ID)
openclaw cron runs --id 309d8d42-8f61-404b-abb2-c4f301999197

5.2 手動觸發

測試任務時不想等到定時時間,可以手動觸發:

bash
openclaw cron run 每日簡報

OpenClaw 會立即執行這個任務,並實時顯示執行過程和結果。這對於調試任務配置非常有用。

5.3 暫停和恢復

臨時禁用某個任務:

bash
openclaw cron disable 每日簡報

恢復:

bash
openclaw cron enable 每日簡報

或者直接在 ~/.openclaw/cron/jobs.json 對應條目中設置 "enabled": false(參見本章第 4 節的配置說明)。如果你要出差一週,可以臨時禁用所有非關鍵任務,避免不必要的通知。

5.4 查看執行日誌

查看某個任務的執行歷史:

bash
openclaw cron runs --id <任務ID>

會顯示該任務的執行記錄,包括開始時間、狀態和結果。任務 ID 可從 openclaw cron list 獲取。如果需要更詳細的日誌,可以使用 openclaw logs --follow 查看實時網關日誌。

展開:更多實戰案例(服務器監控、自動化測試、數據同步、內容發佈、智能提醒)

6. 進階實戰案例

6.1 服務器監控

json
// jobs.json 任務定義格式(推薦通過 CLI 或對話創建)
{
  "cron": {
    "jobs": [
      {
        "name": "server_monitor",
        "schedule": "*/10 * * * *",
        "prompt": "檢查服務器狀態:\n- CPU 使用率超過 90% 時告警\n- 內存使用率超過 85% 時告警\n- 磁盤空間低於 10GB 時告警\n發送結果到 Telegram",
        "enabled": true
      }
    ]
  }
}

這個任務每 10 分鐘檢查一次服務器狀態,只有在出現問題時纔會發送通知。相比傳統的監控系統,這種方式更靈活,你可以隨時調整告警閾值,不需要修改複雜的配置文件。

6.2 自動化測試

json
{
  "cron": {
    "jobs": [
      {
        "name": "nightly_test",
        "schedule": "0 1 * * *",
        "prompt": "運行完整測試套件:\n1. 拉取最新代碼\n2. 安裝依賴\n3. 運行測試\n4. 生成覆蓋率報告\n5. 如果失敗,發送詳細日誌到飛書",
        "enabled": true
      }
    ]
  }
}

每天凌晨 1 點自動運行測試,確保代碼質量。如果測試失敗,團隊成員第二天上班就能看到詳細的錯誤報告。

6.3 數據同步

json
{
  "cron": {
    "jobs": [
      {
        "name": "sync_orders",
        "schedule": "*/5 * * * *",
        "env": {
          "API_KEY": "xxxxx",
          "DB_HOST": "localhost"
        },
        "prompt": "從電商平臺 API 獲取最近 5 分鐘的新訂單,寫入本地數據庫,如果有新訂單就發送通知",
        "retry": {
          "max_attempts": 3,
          "delay": 30
        },
        "enabled": true
      }
    ]
  }
}

每 5 分鐘同步一次訂單數據,確保本地數據庫和線上保持一致。如果 API 調用失敗,會自動重試 3 次。

6.4 內容發佈

json
{
  "cron": {
    "jobs": [
      {
        "name": "auto_publish",
        "schedule": "0 9,14,18 * * *",
        "prompt": "從內容庫中隨機選擇一篇文章,發佈到微信公衆號、知乎、小紅書,記錄發佈結果",
        "enabled": true
      }
    ]
  }
}

每天 9 點、14 點、18 點自動發佈內容,保持賬號活躍度。OpenClaw 會智能地選擇合適的內容,避免重複發佈。

6.5 智能提醒

json
{
  "cron": {
    "jobs": [
      {
        "name": "meeting_reminder",
        "schedule": "0 8 * * 1-5",
        "prompt": "讀取今天的日曆事件,如果有會議就提前 30 分鐘提醒我,包含會議主題、時間、參會人員",
        "enabled": true
      }
    ]
  }
}

工作日早上 8 點檢查今天的日程,有會議就提前提醒。比手機自帶的日曆提醒更智能,因爲可以根據會議重要性調整提醒時間。

7. 最佳實踐

合理設置執行頻率:不要讓任務執行得太頻繁,否則會消耗大量 API token。一般來說,監控類任務 5-10 分鐘一次即可,數據同步 15-30 分鐘,報告生成每天或每週一次。

使用條件判斷減少通知:不要每次執行都發送通知,只在有重要信息時才通知。比如監控任務只在出現問題時告警,而不是每次都報告"一切正常"。

設置超時時間:對於可能執行很久的任務,設置超時時間避免卡死:

json
{
  "cron": {
    "jobs": [
      {
        "name": "long_task",
        "schedule": "0 2 * * *",
        "timeout": 3600,
        "prompt": "執行耗時的數據處理任務",
        "enabled": true
      }
    ]
  }
}

分離關鍵任務和非關鍵任務:把重要的任務(如備份、監控)和不重要的任務(如內容發佈)分開配置,這樣可以在需要時單獨禁用非關鍵任務。

定期檢查任務執行情況:每週查看一次任務執行統計,確保所有任務都正常運行。可以設置一個"健康檢查"任務,每天彙總所有任務的執行情況。


下一步第五章 Skills 技能系統