跳转到主要内容

如何使用 cron、任务计划程序和 GitHub Actions 安排 Cryptohopper MCP 工作流

用 cron、Windows 任务计划程序、GitHub Actions 安排 Cryptohopper MCP 工作流,附带设置脚本、环境变量技巧和常见修复。

作者:Isaac

准备工作


基本模式

这三种调度系统都包裹了同一个脚本。它们的结构都是:运行 MCP 提示 → 捕获输出 → 进行传递。请确保你已经设置好了环境变量,并将输出捕获到日志文件中。

# /home/you/scripts/daily_digest.py

import os
import requests

API_KEY = os.environ["CRYPTOHOPPER_MCP_KEY"]
TELEGRAM_TOKEN = os.environ["TELEGRAM_BOT_TOKEN"]
TELEGRAM_CHAT_ID = os.environ["TELEGRAM_CHAT_ID"]

def run_mcp_workflow(prompt: str) -> str:
# 在这里调用你的 MCP 客户端库——生成报告文本。
...

def send_telegram(text: str) -> None:
requests.post(
f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage",
json={"chat_id": TELEGRAM_CHAT_ID, "text": text, "parse_mode": "Markdown"},
).raise_for_status()

if __name__ == "__main__":
prompt = open("/home/you/prompts/daily_digest.txt").read()
report = run_mcp_workflow(prompt)
send_telegram(report)

设置 — cron (macOS / Linux)

  1. 先手动测试脚本

export CRYPTOHOPPER_MCP_KEY="..."
export TELEGRAM_BOT_TOKEN="..."
export TELEGRAM_CHAT_ID="..."
python3 /home/you/scripts/daily_digest.py

2. 编辑你的 crontab

运行 crontab -e 并添加下面的条目。Cron 不会继承你 shell 的环境变量——请在 crontab 的顶部声明变量。

CRYPTOHOPPER_MCP_KEY=your_key
TELEGRAM_BOT_TOKEN=your_token
TELEGRAM_CHAT_ID=your_chat_id
PATH=/usr/local/bin:/usr/bin:/bin

# 每天 08:00 本地时间执行
0 8 * * * /usr/bin/python3 /home/you/scripts/daily_digest.py >> /home/you/logs/daily.log 2>&1

3. 验证

在计划时间之后,检查日志文件。空的日志意味着 cron 没有运行脚本。日志中的错误意味着脚本运行了但失败了。

bashtail -50 /home/you/logs/daily.log

设置 — 任务计划程序 (Windows)

  1. 从 PowerShell 测试脚本

$env:CRYPTOHOPPER_MCP_KEY = "..."
$env:TELEGRAM_BOT_TOKEN = "..."
$env:TELEGRAM_CHAT_ID = "..."
python C:\Users\you\scripts\daily_digest.py

2. 设置触发器

在“触发器”下,配置你的计划(例如,每天 08:00,每周等)。

3. 配置操作

在“操作”下:程序/脚本 → python(或 python.exe 的完整路径)。添加参数 → C:\Users\you\scripts\daily_digest.py。起始于 → C:\Users\you\scripts

4. 处理环境变量
有两种选择:一种是通过“控制面板”→“系统”→“环境变量”将其设置为系统级变量,另一种是使用 `python-dotenv` 库从 `.env` 文件中加载。

5. 验证

在任务计划程序中查看任务的“上次运行结果”。0x0 表示成功,其他任何值都表示错误。


设置 — GitHub Actions (云托管)

  1. 为你的计划工作流创建一个 GitHub 仓库

    将你的脚本添加到仓库中。不要提交敏感信息。

  2. 添加仓库秘密

    转到“设置”→“Secrets and variables”→“Actions”,然后添加:CRYPTOHOPPER_MCP_KEYTELEGRAM_BOT_TOKENTELEGRAM_CHAT_ID

  3. 创建工作流文件

# .github/workflows/daily_digest.yml

name: Daily digest

on:
schedule:
- cron: "0 7 * * *" # 每天 07:00 UTC
workflow_dispatch: # 允许手动触发

jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install -r requirements.txt
- name: Run digest
env:
CRYPTOHOPPER_MCP_KEY: ${{ secrets.CRYPTOHOPPER_MCP_KEY }}
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
run: python scripts/daily_digest.py

GitHub Actions 的计划使用 UTC 时间——请相应地转换你的本地时间。在仓库的 Actions 标签页中监控运行情况;GitHub 会在你计划的运行失败时给你发邮件。


选择何处进行调度

选项

最适合

缺点

cron

本地/个人工作流,在始终开机的机器上运行

笔记本电脑进入休眠时也会停止

任务计划程序

Windows 上的个人工作流

用户界面笨拙,环境变量处理麻烦

GitHub Actions

可靠、云托管,对大多数个人用户免费

在 GitHub 拥堵时运行可能会延迟

VPS + systemd/cron

生产级的可靠性

你需要自己管理服务器

对大多数用户来说,GitHub Actions 是一个不错的默认选择:免费、可靠,并且在出现问题时易于查找日志。


故障排除

Cron 作业未执行

请检查 `grep CRON /var/log/syslog` (Linux) 或 `log show --predicate 'process == "cron"'` (macOS)。最常见的原因是缺少 PATH 或缺少环境变量——cron 在一个非常精简的环境中运行。

Cron 运行但脚本立即报错

几乎总是由于缺少环境变量。让脚本在缺少必需环境变量时打印清晰的错误信息并提前退出——不要让它在 MCP 调用中静默失败。

计划任务运行时间与预期不符

时区问题。Cron 使用机器的本地时区;GitHub Actions 使用 UTC。在设置实际的调度频率之前,先在可预测的时间测试你的计划。

即使脚本已运行,日志文件仍然为空

重定向没有捕获 stderr。使用 `>> log 2>&1`——双箭头是追加;单箭头 `>` 会覆盖每次运行,丢失之前的输出。

GitHub Actions 计划被跳过

GitHub 会在负载过高时限制计划工作流的执行,偶尔会跳过运行。对于必须可靠执行的工作流,请使用第二个调度机制作为备份,或者付费购买专用运行器。对大多数工作流来说,偶尔的跳过是可以容忍的。

计划运行比预期更快地消耗你的配额

每次运行都会产生费用。请访问如何监控你的 Cryptohopper MCP 支出,以监控使用情况。从 MCP 用量接口获取的每周汇总检查可以快速发现失控的计划。

你需要亚分钟级的调度精度

没有一个调度器能提供可靠的亚分钟级精度,而且你通常也不需要它。如果你认为你需要,请退一步想——也许该工作流用事件驱动的 Webhook 来设计会更好。


这是否解答了您的问题?