mcpField
D
dual-channel-watchexec-notifications

dual-channel-watchexec-notifications

github.com/terrylicaクラウド・DevOps160 回インストール1 日前に更新
リポジトリ

dual-channel-watchexec-notifications について

dual-channel-watchexec-notificationsは、ファイル変更やプロセスのクラッシュをwatchexecで検知して通知するためのスキルです。TelegramとPushoverへの送信形式、トラブルシューティング、導入前の確認方法を扱います。

主な機能

  1. 01watchexecイベント通知のパターン
  2. 02Telegram向けHTMLメッセージ形式
  3. 03Pushover向けプレーンテキスト形式
  4. 04動的コンテンツのエスケープ指針
  5. 05通知トラブルシューティングのチェックリスト

活用シーン

  1. 01監視対象のファイル変更の通知
  2. 02プロセスクラッシュ後の両チャネルへの通知
  3. 03通知の欠落や形式不備の調査
  4. 04導入前の通知スクリプト確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/terrylica/cc-skills --skill dual-channel-watchexec-notifications

インストール後、Claude Code で/dual-channel-watchexec-notificationsを入力して読み込まれたか確認します。

同梱ファイルreferences/evolution-log.md

詳細

Watchexec のデュアルチャネル通知

watchexec がファイルの変更やプロセスのクラッシュを検出したときに、Telegram と Pushover の両方に確実に通知します。

このスキルを使う場面

次のような場合にこのスキルを使います。

  • 通知付きのファイル変更監視を設定する
  • Telegram と Pushover を使ったプロセスのクラッシュ通知を実装する
  • デュアルチャネル通知に対応した watchexec ラッパーを作成する
  • HTML(Telegram)とプレーンテキスト(Pushover)の両方でメッセージを整形する
  • 通知の配信や書式設定に関する問題をトラブルシューティングする

基本パターン

watchexec ラッパースクリプト → イベントを検出 → notify-script → Telegram + Pushover

# wrapper.sh - Monitors process and detects restart reasons
watchexec --restart -- python bot.py

# On event, call:
notify-script.sh <reason> <exit_code> <watchexec_info_file> <crash_context>

重要なルール:書式の違い

Telegram:HTML モードのみ

MESSAGE="<b>Alert</b>: <code>file.py</code>"
# Escape 3 chars: & → &amp;, < → &lt;, > → &gt;

Pushover:プレーンテキストのみ

/usr/bin/env bash << 'SKILL_SCRIPT_EOF'
# Strip HTML tags before sending
MESSAGE_PLAIN=$(echo "$MESSAGE_HTML" | sed 's/<[^>]*>//g')
SKILL_SCRIPT_EOF

Telegram で HTML を使う理由:

  • Markdown では 40 文字以上(.、-、_ など)をエスケープする必要があります
  • HTML では 3 文字(&、<、>)だけをエスケープすれば済みます
  • 業界のベストプラクティスです

クイックリファレンス

両方のチャネルに送信する
/usr/bin/env bash << 'SKILL_SCRIPT_EOF_2'
# 1. Build HTML message for Telegram
MESSAGE_HTML="<b>File</b>: <code>handler_classes.py</code>"

# 2. Strip HTML for Pushover
MESSAGE_PLAIN=$(echo "$MESSAGE_HTML" | sed 's/<[^>]*>//g')

# 3. Send to Telegram with HTML
curl -s -d "chat_id=$CHAT_ID" \
  -d "text=$MESSAGE_HTML" \
  -d "parse_mode=HTML" \
  https://api.telegram.org/bot$BOT_TOKEN/sendMessage

# 4. Send to Pushover with plain text
curl -s --form-string "message=$MESSAGE_PLAIN" \
  https://api.pushover.net/1/messages.json
SKILL_SCRIPT_EOF_2
実行パターン
# Fire-and-forget background notifications (don't block restarts)
"$NOTIFY_SCRIPT" "crash" "$EXIT_CODE" "$INFO_FILE" "$CONTEXT_FILE" &

検証チェックリスト

デプロイ前に確認してください。

  • Telegram では Markdown ではなく HTML パースモードを使用している
  • Pushover 用に HTML タグを除去している(プレーンテキストのみ)
  • 動的なコンテンツすべてに HTML エスケープを適用している(&、<、>)
  • 認証情報を環境変数/Doppler から読み込んでいる(ハードコードしていない)
  • デバッグ用にメッセージのアーカイブを有効にしている
  • ファイルの検出に find -newermt ではなく stat を使用している
  • ヒアドキュメントで変数を展開できるよう、引用符で囲まない区切り文字を使用している
  • 通知をバックグラウンドで実行している(実行後は待たずに終了)
  • 特殊文字(_、.、-)を含むファイルでテストしている
  • Telegram と Pushover の両方で通知を正常に受信できている

まとめ

重要なポイント:

  1. Telegram では常に HTML モードを使用します(エスケープが簡単です)
  2. Pushover 用には常に HTML タグを除去します(プレーンテキストのみ)
  3. HTML でエスケープするのは 3 文字だけです:& → &amp;、< → &lt;、> → &gt;
  4. デバッグ用に、送信前にメッセージをアーカイブします
  5. macOS でのファイル検出には find -newermt ではなく stat を使用します
  6. 認証情報は環境変数/Doppler から読み込みます(ハードコードしないでください)
  7. 通知はバックグラウンドで実行し、再起動を妨げないようにします(実行後は待たずに終了)

リファレンスドキュメント

詳細については、以下を参照してください。

同梱のサンプル:

  • examples/notify-restart.sh - デュアルチャネル通知の完全なスクリプト
  • examples/bot-wrapper.sh - 再起動検出機能付き watchexec ラッパー
  • examples/setup-example.sh - セットアップガイドとインストール手順

トラブルシューティング

問題原因解決策
Telegram のエスケープエラーMarkdown を使用していますparse_mode=HTML で HTML モードに切り替えてください
Pushover に HTML タグが表示されるHTML が削除されていませんPushover に送信する前に sed でタグを削除してください
通知が届かない認証情報がありませんBOT_TOKEN、CHAT_ID、Pushover のキーを確認してください
特殊文字が正しく表示されないHTML エスケープがありません動的コンテンツ内の &、<、> をエスケープしてください
find -newermt が macOS で失敗するmacOS との互換性がありません代わりに stat でファイルを検出してください
通知処理がブロックするバックグラウンドで実行されていませんnotify スクリプトに & を追加して、完了を待たずに実行してください
通知が重複する再起動ループデバウンスロジックまたはクールダウン期間を追加してください
クラッシュ時のコンテキストがないコンテキストファイルが書き込まれていませんwatchexec の情報ファイルのパスが存在することを確認してください

コメント