Files
Nexus/web/agent/uninstall.sh
T
Your Name de8d860244 fix: handle legacy agent heartbeat without server_id + migrate on_event to lifespan
- AgentHeartbeat.server_id changed to Optional[int] — missing server_id
  now returns 200 (discarded) instead of 422, stopping retry loops
- web/agent/agent.py: on_event("startup") → FastAPI lifespan pattern
- Added exponential backoff on consecutive heartbeat failures (cap 5min)
- Agent stops heartbeat loop on "discarded" response from central
- main.py: promoted temporary debug 422 handler to production-grade
- uninstall.sh: added legacy agent cleanup (pkill patterns, crontab,
  /opt/multisync-agent path)
- Confirmed servers.html batch buttons work correctly (disabled state
  is correct when no agents installed)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 18:20:14 +08:00

116 lines
3.6 KiB
Bash

#!/bin/bash
# ================================================================
# Nexus Agent Uninstall Script
# Usage: curl -fsSL https://YOUR_NEXUS_DOMAIN/agent/uninstall.sh | bash
#
# Stops and removes the nexus-agent systemd service and /opt/nexus-agent directory.
# Does NOT remove rsync (may be used by other tools).
# ================================================================
set -e
INSTALL_DIR="/opt/nexus-agent"
SERVICE_NAME="nexus-agent"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
echo ""
echo "=========================================="
echo " Nexus Agent Uninstall"
echo "=========================================="
echo ""
# --- Privilege detection ---
if [ "$(id -u)" -eq 0 ]; then
SUDO=""
else
if command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; then
SUDO="sudo"
else
echo "ERROR: Must run as root or have passwordless sudo."
exit 1
fi
fi
# 1. Stop service if running
echo "[1/5] Stop service..."
$SUDO systemctl stop "$SERVICE_NAME" 2>/dev/null || true
# Kill any stale agent processes (new: uvicorn agent:app; legacy: python.*agent\.py or nexus_agent)
pkill -f "uvicorn agent:app" 2>/dev/null || true
pkill -f "python.*agent\.py" 2>/dev/null || true
pkill -f "nexus_agent" 2>/dev/null || true
# Kill any process on the agent port
if command -v fuser >/dev/null 2>&1; then
$SUDO fuser -k 8601/tcp 2>/dev/null || true
fi
echo " Service stopped, stale processes killed"
# 2. Disable and remove systemd unit
echo "[2/5] Remove systemd unit..."
if [ -f "$SERVICE_FILE" ]; then
$SUDO systemctl disable "$SERVICE_NAME" 2>/dev/null || true
$SUDO rm -f "$SERVICE_FILE"
$SUDO systemctl daemon-reload
echo " Unit removed"
else
echo " No systemd unit found"
fi
# 3. Remove install directory (standard + legacy paths)
echo "[3/6] Remove install directory..."
for dir in "$INSTALL_DIR" "/opt/multisync-agent"; do
if [ -d "$dir" ]; then
$SUDO rm -rf "$dir"
echo " ${dir} removed"
fi
done
if [ ! -d "$INSTALL_DIR" ] && [ ! -d "/opt/multisync-agent" ]; then
echo " No install directory found"
fi
# 4. Remove log file
echo "[4/6] Remove log file..."
removed_log=0
for logfile in "/var/log/nexus-agent.log" "/var/log/multisync-agent.log"; do
if [ -f "$logfile" ]; then
$SUDO rm -f "$logfile"
echo " ${logfile} removed"
removed_log=1
fi
done
if [ "$removed_log" -eq 0 ]; then
echo " No log file found"
fi
# 5. Clean up crontab entries (legacy agents may use cron for auto-restart)
echo "[5/6] Clean up crontab..."
crontab_cleaned=0
for user_crondir in /var/spool/cron/crontabs /var/spool/cron; do
if [ -d "$user_crondir" ]; then
for crontab_file in "$user_crondir"/*; do
if [ -f "$crontab_file" ] && grep -q "nexus.agent\|multisync.agent\|nexus-agent\|multisync-agent" "$crontab_file" 2>/dev/null; then
$SUDO sed -i '/nexus.agent\|multisync.agent\|nexus-agent\|multisync-agent/d' "$crontab_file"
echo " Cleaned crontab: $crontab_file"
crontab_cleaned=1
fi
done
fi
done
if [ "$crontab_cleaned" -eq 0 ]; then
echo " No crontab entries found"
fi
# 6. Clean up sudoers residual (left by install/upgrade _sudo_wrap)
echo "[6/6] Clean up sudoers..."
if [ -f "/etc/sudoers.d/nexus-agent" ]; then
$SUDO rm -f /etc/sudoers.d/nexus-agent
echo " /etc/sudoers.d/nexus-agent removed"
else
echo " No sudoers residual found"
fi
echo ""
echo "=========================================="
echo " Uninstall complete!"
echo "=========================================="
echo ""