第四章 自動化任務入門
前提:本章假設你已完成第一章的安裝配置。定時任務的通知功能需要配合第三章的消息渠道(飛書/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 使用命令行
# 添加定時任務(--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設置間隔(如10m、1h),--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.json的cron字段中,控制是否啓用、最大併發數等: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 中添加判斷邏輯:
// jobs.json 任務定義格式(推薦通過 CLI 或對話創建)
{
"cron": {
"jobs": [
{
"name": "disk_alert",
"schedule": "*/30 * * * *",
"prompt": "檢查磁盤使用率,如果超過 80% 就發送告警到 Telegram,否則不做任何操作",
"enabled": true
}
]
}
}OpenClaw 會智能地理解這個條件,只有在磁盤使用率超過 80% 時纔會發送消息。這比傳統的腳本更靈活,因爲你不需要寫 if-else 邏輯,只需要用自然語言描述條件即可。
你還可以設置更復雜的條件:
{
"cron": {
"jobs": [
{
"name": "smart_backup",
"schedule": "0 2 * * *",
"prompt": "檢查數據庫大小,如果超過 1GB 就執行完整備份,否則只備份增量數據。備份完成後,如果是工作日就發送通知到飛書,如果是週末就發送到 Telegram",
"enabled": true
}
]
}
}4.2 任務鏈
多個任務可以組合成工作流:
{
"cron": {
"jobs": [
{
"name": "weekly_report",
"schedule": "0 17 * * 5",
"prompt": "1. 讀取本週 Git 提交記錄\n2. 從 Jira 獲取已完成任務\n3. 生成 Markdown 格式週報\n4. 發送到飛書工作羣",
"enabled": true
}
]
}
}OpenClaw 會按順序執行每個步驟,前一步的結果會傳遞給下一步。如果某一步失敗,後續步驟會自動跳過,並記錄失敗原因。
你也可以設置任務依賴關係:
{
"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 環境變量
如果任務需要訪問外部服務,可以在配置中設置環境變量:
{
"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 中硬編碼敏感信息,也方便在不同環境(開發、測試、生產)使用不同的配置。
你還可以在全局配置中設置通用的環境變量:
{
"cron": {
"global_env": {
"TIMEZONE": "Asia/Shanghai",
"NOTIFICATION_CHANNEL": "telegram"
},
"jobs": [
{
"name": "morning_brief",
"schedule": "0 8 * * *",
"prompt": "生成今日簡報併發送到 ${NOTIFICATION_CHANNEL}",
"enabled": true
}
]
}
}4.4 錯誤處理和重試
定時任務可能因爲網絡問題、服務不可用等原因失敗。你可以配置重試策略:
{
"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 查看任務狀態
openclaw cron list會顯示所有任務的 ID、名稱、調度方式、下次/上次執行時間、狀態等信息:

字段說明:
ID是任務唯一標識(後續管理任務時會用到),Schedule顯示調度類型和參數,Next是距下次執行的時間,Status爲idle(空閒等待中)或running(正在執行)。
查看某個任務的執行歷史(需要指定任務 ID,可從 cron list 獲取):
# 查看任務的執行歷史(--id 爲任務 ID)
openclaw cron runs --id 309d8d42-8f61-404b-abb2-c4f3019991975.2 手動觸發
測試任務時不想等到定時時間,可以手動觸發:
openclaw cron run 每日簡報OpenClaw 會立即執行這個任務,並實時顯示執行過程和結果。這對於調試任務配置非常有用。
5.3 暫停和恢復
臨時禁用某個任務:
openclaw cron disable 每日簡報恢復:
openclaw cron enable 每日簡報或者直接在 ~/.openclaw/cron/jobs.json 對應條目中設置 "enabled": false(參見本章第 4 節的配置說明)。如果你要出差一週,可以臨時禁用所有非關鍵任務,避免不必要的通知。
5.4 查看執行日誌
查看某個任務的執行歷史:
openclaw cron runs --id <任務ID>會顯示該任務的執行記錄,包括開始時間、狀態和結果。任務 ID 可從 openclaw cron list 獲取。如果需要更詳細的日誌,可以使用 openclaw logs --follow 查看實時網關日誌。
展開:更多實戰案例(服務器監控、自動化測試、數據同步、內容發佈、智能提醒)
6. 進階實戰案例
6.1 服務器監控
// 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 自動化測試
{
"cron": {
"jobs": [
{
"name": "nightly_test",
"schedule": "0 1 * * *",
"prompt": "運行完整測試套件:\n1. 拉取最新代碼\n2. 安裝依賴\n3. 運行測試\n4. 生成覆蓋率報告\n5. 如果失敗,發送詳細日誌到飛書",
"enabled": true
}
]
}
}每天凌晨 1 點自動運行測試,確保代碼質量。如果測試失敗,團隊成員第二天上班就能看到詳細的錯誤報告。
6.3 數據同步
{
"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 內容發佈
{
"cron": {
"jobs": [
{
"name": "auto_publish",
"schedule": "0 9,14,18 * * *",
"prompt": "從內容庫中隨機選擇一篇文章,發佈到微信公衆號、知乎、小紅書,記錄發佈結果",
"enabled": true
}
]
}
}每天 9 點、14 點、18 點自動發佈內容,保持賬號活躍度。OpenClaw 會智能地選擇合適的內容,避免重複發佈。
6.5 智能提醒
{
"cron": {
"jobs": [
{
"name": "meeting_reminder",
"schedule": "0 8 * * 1-5",
"prompt": "讀取今天的日曆事件,如果有會議就提前 30 分鐘提醒我,包含會議主題、時間、參會人員",
"enabled": true
}
]
}
}工作日早上 8 點檢查今天的日程,有會議就提前提醒。比手機自帶的日曆提醒更智能,因爲可以根據會議重要性調整提醒時間。
7. 最佳實踐
合理設置執行頻率:不要讓任務執行得太頻繁,否則會消耗大量 API token。一般來說,監控類任務 5-10 分鐘一次即可,數據同步 15-30 分鐘,報告生成每天或每週一次。
使用條件判斷減少通知:不要每次執行都發送通知,只在有重要信息時才通知。比如監控任務只在出現問題時告警,而不是每次都報告"一切正常"。
設置超時時間:對於可能執行很久的任務,設置超時時間避免卡死:
{
"cron": {
"jobs": [
{
"name": "long_task",
"schedule": "0 2 * * *",
"timeout": 3600,
"prompt": "執行耗時的數據處理任務",
"enabled": true
}
]
}
}分離關鍵任務和非關鍵任務:把重要的任務(如備份、監控)和不重要的任務(如內容發佈)分開配置,這樣可以在需要時單獨禁用非關鍵任務。
定期檢查任務執行情況:每週查看一次任務執行統計,確保所有任務都正常運行。可以設置一個"健康檢查"任務,每天彙總所有任務的執行情況。
下一步:第五章 Skills 技能系統