stop-all.sh•7.21 kB
#!/bin/bash
# Universal MCP Server - 停止スクリプト
echo "=========================================="
echo "🛑 Universal MCP Server - 停止"
echo "=========================================="
echo ""
STOPPED=0
# MCPサーバープロセスを検索して停止
echo "1️⃣ MCPサーバーを停止しています..."
MCP_PIDS=$(pgrep -f "node.*build/index")
if [ -n "$MCP_PIDS" ]; then
echo " 見つかったプロセス:"
for pid in $MCP_PIDS; do
CMD=$(ps -p $pid -o cmd= 2>/dev/null)
echo " - PID $pid: $CMD"
done
echo ""
for pid in $MCP_PIDS; do
kill $pid 2>/dev/null
if [ $? -eq 0 ]; then
echo " ✅ PID $pid を停止しました"
STOPPED=$((STOPPED + 1))
else
echo " ⚠️ PID $pid の停止に失敗しました"
fi
done
# 強制停止が必要か確認
sleep 1
REMAINING=$(pgrep -f "node.*build/index")
if [ -n "$REMAINING" ]; then
echo ""
echo " ⚠️ 一部プロセスが残っています。強制停止します..."
for pid in $REMAINING; do
kill -9 $pid 2>/dev/null
echo " ✅ PID $pid を強制停止しました (SIGKILL)"
STOPPED=$((STOPPED + 1))
done
fi
else
echo " ℹ️ MCPサーバーのプロセスは見つかりませんでした"
fi
echo ""
# ngrokプロセスを検索して停止
echo "2️⃣ ngrokを停止しています..."
NGROK_PIDS=$(pgrep -f "ngrok")
if [ -n "$NGROK_PIDS" ]; then
echo " 見つかったプロセス:"
for pid in $NGROK_PIDS; do
CMD=$(ps -p $pid -o cmd= 2>/dev/null)
USER=$(ps -p $pid -o user= 2>/dev/null)
echo " - PID $pid (User: $USER): $CMD"
done
echo ""
# 現在のユーザー名を取得
CURRENT_USER=$(whoami)
for pid in $NGROK_PIDS; do
PROC_USER=$(ps -p $pid -o user= 2>/dev/null)
# 自分のプロセスかチェック
if [ "$PROC_USER" = "$CURRENT_USER" ]; then
kill $pid 2>/dev/null
if [ $? -eq 0 ]; then
echo " ✅ PID $pid を停止しました"
STOPPED=$((STOPPED + 1))
else
echo " ⚠️ PID $pid の停止に失敗しました。強制停止を試みます..."
kill -9 $pid 2>/dev/null
if [ $? -eq 0 ]; then
echo " ✅ PID $pid を強制停止しました (SIGKILL)"
STOPPED=$((STOPPED + 1))
else
echo " ❌ PID $pid の停止に失敗しました(権限がない可能性)"
echo " 💡 手動停止: kill -9 $pid"
fi
fi
else
echo " ⚠️ PID $pid は別のユーザー($PROC_USER)のプロセスです"
echo " 💡 このプロセスは停止できません"
fi
done
# 残存プロセスの確認
sleep 1
REMAINING=$(pgrep -f "ngrok")
if [ -n "$REMAINING" ]; then
echo ""
echo " ℹ️ まだngrokプロセスが残っています:"
for pid in $REMAINING; do
PROC_USER=$(ps -p $pid -o user= 2>/dev/null)
CMD=$(ps -p $pid -o cmd= 2>/dev/null)
echo " - PID $pid (User: $PROC_USER)"
echo " $CMD"
done
echo ""
echo " 💡 このプロセスは別のターミナル/ユーザーで起動されています"
echo " 💡 停止するには、そのターミナルで Ctrl+C を押してください"
echo ""
echo " または、強制停止を試みる場合:"
echo " kill -9 $REMAINING"
fi
else
echo " ℹ️ ngrokのプロセスは見つかりませんでした"
fi
echo ""
# ポートの確認
echo "3️⃣ ポート使用状況を確認しています..."
PORT_3000=$(lsof -ti:3000 2>/dev/null)
PORT_4040=$(lsof -ti:4040 2>/dev/null)
PORT_4041=$(lsof -ti:4041 2>/dev/null)
if [ -n "$PORT_3000" ]; then
echo " ⚠️ ポート3000がまだ使用中です (PID: $PORT_3000)"
read -p " 停止しますか? (y/N): " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
kill -9 $PORT_3000 2>/dev/null
echo " ✅ ポート3000のプロセスを停止しました"
STOPPED=$((STOPPED + 1))
fi
else
echo " ✅ ポート3000は空いています"
fi
if [ -n "$PORT_4040" ] || [ -n "$PORT_4041" ]; then
if [ -n "$PORT_4040" ]; then
echo " ⚠️ ポート4040がまだ使用中です (PID: $PORT_4040)"
fi
if [ -n "$PORT_4041" ]; then
echo " ⚠️ ポート4041がまだ使用中です (PID: $PORT_4041)"
fi
read -p " 停止しますか? (y/N): " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
[ -n "$PORT_4040" ] && kill -9 $PORT_4040 2>/dev/null && echo " ✅ ポート4040のプロセスを停止しました"
[ -n "$PORT_4041" ] && kill -9 $PORT_4041 2>/dev/null && echo " ✅ ポート4041のプロセスを停止しました"
STOPPED=$((STOPPED + 1))
fi
else
echo " ✅ ngrokのポート(4040/4041)は空いています"
fi
echo ""
# 一時ファイルのクリーンアップ
echo "4️⃣ 一時ファイルをクリーンアップしています..."
TEMP_FILES=(
"/tmp/ngrok-*.log"
"/tmp/ngrok-startup.log"
"/tmp/mcp-test.log"
)
CLEANED=0
for pattern in "${TEMP_FILES[@]}"; do
files=$(ls $pattern 2>/dev/null)
if [ -n "$files" ]; then
for file in $files; do
rm -f "$file" 2>/dev/null
if [ $? -eq 0 ]; then
echo " ✅ $file を削除しました"
CLEANED=$((CLEANED + 1))
fi
done
fi
done
if [ $CLEANED -eq 0 ]; then
echo " ℹ️ クリーンアップする一時ファイルはありませんでした"
fi
echo ""
echo "=========================================="
if [ $STOPPED -gt 0 ]; then
echo "✅ $STOPPED 個のプロセスを停止しました"
else
echo "ℹ️ 停止するプロセスはありませんでした"
fi
echo "=========================================="
echo ""
# 最終確認
echo "📊 最終確認:"
echo ""
# プロセス確認
MCP_CHECK=$(pgrep -f "node.*build/index")
NGROK_CHECK=$(pgrep -f "ngrok")
if [ -z "$MCP_CHECK" ] && [ -z "$NGROK_CHECK" ]; then
echo " ✅ すべてのプロセスが停止しました"
else
echo " ⚠️ まだ実行中のプロセスがあります:"
[ -n "$MCP_CHECK" ] && echo " - MCP Server (PID: $MCP_CHECK)"
[ -n "$NGROK_CHECK" ] && echo " - ngrok (PID: $NGROK_CHECK)"
echo ""
echo " 手動で停止する場合:"
echo " kill -9 $MCP_CHECK $NGROK_CHECK"
fi
echo ""
# ポート確認
PORT_CHECK=$(lsof -ti:3000,4040,4041 2>/dev/null)
if [ -z "$PORT_CHECK" ]; then
echo " ✅ すべてのポートが解放されました"
else
echo " ⚠️ まだ使用中のポートがあります:"
lsof -i:3000,4040,4041 2>/dev/null | head -10
fi
echo ""
echo "🚀 再起動する場合:"
echo " ./start-all.sh"
echo ""