メインコンテンツにスキップ

cron、タスクスケジューラ、GitHub ActionsでCryptohopper MCPワークフローをスケジュールする方法

cron、Windowsタスクスケジューラ、GitHub ActionsでCryptohopper MCPワークフローをスケジュールする方法を学ぼう。セットアップスクリプト、環境変数ヒント、よくある不具合も。

対応者:Isaac

前提条件

  • MCPワークフローがスクリプトとして表現されたもの — スクリプトはMCPプロンプトを実行し、出力をキャプチャし、配信する必要があります。MCPレポートをTelegram、Discord、またはメールに送信する方法を参照してください。

  • 環境変数またはシークレットとして保存されたCryptohopper MCP APIキー。スクリプトにハードコーディングしないでください — APIキーのセキュリティに関するベストプラクティスを参照してください。


基本パターン

3つのスケジューリングシステムすべてが同じスクリプトをラップします。構造は常に: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はシェルの環境を継承しないため、crontabの先頭で変数を宣言してください。

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

# ローカル時間の午前8時に毎日
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. トリガーを設定する

トリガーの下で、スケジュール(毎日午前8時、毎週など)を設定します。

3. アクションを設定する

アクションの下:プログラム/スクリプト → python(またはpython.exeのフルパス)。引数を追加 → C:\Users\you\scripts\daily_digest.py。開始場所 → C:\Users\you\scripts

4. 環境変数を処理する
2つのオプション:コントロールパネル → システム → 環境変数からシステム全体で設定するか、python-dotenvライブラリを使用して.envファイルからロードします。

5. 検証する

タスクスケジューラでタスクの最終実行結果を確認します。0x0は成功を意味します。それ以外はエラーです。


セットアップ — GitHub Actions (クラウドホスト)

  1. スケジュールされたワークフロー用のGitHubリポジトリを作成する

    スクリプトをリポジトリに追加します。シークレットをコミットしないでください。

  2. リポジトリシークレットを追加する

    設定 → シークレットと変数 → Actions に移動し、以下を追加します:CRYPTOHOPPER_MCP_KEYTELEGRAM_BOT_TOKENTELEGRAM_CHAT_ID

  3. ワークフローファイルを作成する

# .github/workflows/daily_digest.yml

name: Daily digest

on:
schedule:
- cron: "0 7 * * *" # UTC午前7時、毎日
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での個人ワークフロー

使いにくいUI、環境変数処理が面倒

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は高負荷時にスケジュールされたワークフローをスロットルし、時折実行をスキップします。確実に実行する必要があるワークフローの場合は、バックアップとして2番目のスケジューリングメカニズムを使用するか、専用ランナーの料金を支払ってください。ほとんどのワークフローでは、時折のスキップは許容範囲内です。

スケジュールされた実行が予想よりも早くクォータを消費している

すべての実行にはコストがかかります。Cryptohopper MCPの支出を監視する方法で、使用状況を監視してください。MCP使用量エンドポイントからの週次合計チェックは、暴走したスケジュールを迅速に検出します。

1分未満のスケジューリング精度が必要である

これらのスケジューラはいずれも信頼性の高い1分未満の精度を提供しておらず、実際にはめったに必要ありません。必要だと考える場合は、一歩戻って、ワークフローはイベント駆動型Webhookとして設計する方が良いでしょう。


こちらの回答で解決しましたか?