109 lines
3.6 KiB
Bash
Executable File
109 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Script to diagnose why Blockscout container is crashing
|
|
# Run from VMID 5000 or Proxmox host
|
|
|
|
set -euo pipefail
|
|
|
|
VMID=5000
|
|
|
|
echo "=========================================="
|
|
echo "Blockscout Crash Diagnosis"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Check if running from Proxmox host or inside container
|
|
if [ -f "/proc/1/cgroup" ] && grep -q "lxc" /proc/1/cgroup 2>/dev/null; then
|
|
EXEC_PREFIX=""
|
|
echo "Running inside VMID 5000"
|
|
else
|
|
EXEC_PREFIX="pct exec $VMID --"
|
|
echo "Running from Proxmox host, executing in VMID 5000"
|
|
fi
|
|
|
|
# Find container
|
|
BLOCKSCOUT_CONTAINER=$($EXEC_PREFIX docker ps -a | grep blockscout | grep -v postgres | awk '{print $1}' | head -1)
|
|
|
|
if [ -z "$BLOCKSCOUT_CONTAINER" ]; then
|
|
echo "❌ Blockscout container not found"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Container ID: $BLOCKSCOUT_CONTAINER"
|
|
echo ""
|
|
|
|
# Check container status
|
|
echo "=== Container Status ==="
|
|
$EXEC_PREFIX docker inspect --format='Status: {{.State.Status}} | Exit Code: {{.State.ExitCode}} | Started: {{.State.StartedAt}} | Finished: {{.State.FinishedAt}}' $BLOCKSCOUT_CONTAINER
|
|
echo ""
|
|
|
|
# Check recent logs (last 50 lines)
|
|
echo "=== Recent Logs (Last 50 lines) ==="
|
|
$EXEC_PREFIX docker logs $BLOCKSCOUT_CONTAINER 2>&1 | tail -50
|
|
echo ""
|
|
|
|
# Check for specific errors
|
|
echo "=== Error Summary ==="
|
|
$EXEC_PREFIX docker logs $BLOCKSCOUT_CONTAINER 2>&1 | grep -i "error\|fatal\|exception\|crash\|panic" | tail -20 || echo "No obvious errors found in logs"
|
|
echo ""
|
|
|
|
# Check container configuration
|
|
echo "=== Container Configuration ==="
|
|
echo "Command:"
|
|
$EXEC_PREFIX docker inspect --format='{{.Config.Cmd}}' $BLOCKSCOUT_CONTAINER
|
|
echo ""
|
|
echo "Entrypoint:"
|
|
$EXEC_PREFIX docker inspect --format='{{.Config.Entrypoint}}' $BLOCKSCOUT_CONTAINER
|
|
echo ""
|
|
|
|
# Check environment variables
|
|
echo "=== Key Environment Variables ==="
|
|
$EXEC_PREFIX docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' $BLOCKSCOUT_CONTAINER | grep -E "DATABASE|POSTGRES|PORT|HOST" | head -10
|
|
echo ""
|
|
|
|
# Check if postgres is accessible
|
|
echo "=== Database Connectivity ==="
|
|
if $EXEC_PREFIX docker ps | grep -q postgres; then
|
|
echo "✅ Postgres container is running"
|
|
$EXEC_PREFIX docker exec blockscout-postgres psql -U blockscout -d blockscout -c "SELECT 1;" >/dev/null 2>&1 && \
|
|
echo "✅ Database connection test successful" || \
|
|
echo "❌ Database connection test failed"
|
|
else
|
|
echo "❌ Postgres container is not running"
|
|
fi
|
|
echo ""
|
|
|
|
# Check port conflicts
|
|
echo "=== Port 4000 Check ==="
|
|
if $EXEC_PREFIX netstat -tlnp 2>/dev/null | grep -q ":4000 "; then
|
|
echo "⚠️ Port 4000 is in use:"
|
|
$EXEC_PREFIX netstat -tlnp 2>/dev/null | grep ":4000 "
|
|
else
|
|
echo "✅ Port 4000 is available"
|
|
fi
|
|
echo ""
|
|
|
|
# Check docker-compose configuration
|
|
echo "=== Docker Compose Configuration ==="
|
|
if $EXEC_PREFIX test -f /opt/blockscout/docker-compose.yml; then
|
|
echo "docker-compose.yml found"
|
|
echo "Blockscout service configuration:"
|
|
$EXEC_PREFIX grep -A 20 "blockscout:" /opt/blockscout/docker-compose.yml | head -25
|
|
else
|
|
echo "⚠️ docker-compose.yml not found at /opt/blockscout"
|
|
fi
|
|
echo ""
|
|
|
|
# Recommendations
|
|
echo "=========================================="
|
|
echo "Diagnosis Complete"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "Common fixes:"
|
|
echo "1. If no startup command: Add 'command: bin/blockscout start' to docker-compose.yml"
|
|
echo "2. If database connection fails: Check DATABASE_URL environment variable"
|
|
echo "3. If port conflict: Change port mapping or stop conflicting service"
|
|
echo "4. If missing env vars: Check .env file or docker-compose.yml environment section"
|
|
echo ""
|
|
|