dcda6fe9b8
Improved "Cloud Connectivity Test" section: - Now shows as dedicated section with bold header - Displays full URL being tested (https://us5-cloud.acronis.com) - Shows HTTP status code on success (e.g., "✓ Reachable (HTTP 200)") - Provides troubleshooting steps on failure: • Check internet connectivity • Verify firewall allows HTTPS (port 443) • Manual test command provided This makes it easy to verify the agent can reach Acronis cloud and diagnose connectivity issues.
269 lines
9.2 KiB
Bash
Executable File
269 lines
9.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
################################################################################
|
|
# Acronis Agent Status Checker
|
|
################################################################################
|
|
# Purpose: Check status of all Acronis Cyber Protect services
|
|
# Services monitored:
|
|
# - aakore (Acronis Agent Core)
|
|
# - acronis_mms (Management Service)
|
|
# - acronis_schedule (Scheduler)
|
|
# - active-protection.service (Ransomware Protection)
|
|
################################################################################
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
|
|
|
# Require root
|
|
if [ "$EUID" -ne 0 ]; then
|
|
print_error "This script must be run as root"
|
|
exit 1
|
|
fi
|
|
|
|
print_banner "Acronis Agent Status"
|
|
|
|
echo ""
|
|
echo -e "${BOLD}Checking Acronis Cyber Protect Services...${NC}"
|
|
echo ""
|
|
|
|
# Array of services to check
|
|
declare -a SERVICES=(
|
|
"aakore:Acronis Agent Core"
|
|
"acronis_mms:Management Service"
|
|
"acronis_schedule:Backup Scheduler"
|
|
"active-protection:Ransomware Protection"
|
|
)
|
|
|
|
# Track overall status
|
|
all_running=true
|
|
any_installed=false
|
|
|
|
# Function to check service status
|
|
check_service_status() {
|
|
local service_name="$1"
|
|
local service_desc="$2"
|
|
|
|
# Check if service exists
|
|
if systemctl list-unit-files | grep -q "^${service_name}.service"; then
|
|
any_installed=true
|
|
|
|
# Get service status
|
|
if systemctl is-active --quiet "$service_name"; then
|
|
echo -e " ${GREEN}●${NC} ${BOLD}${service_desc}${NC}"
|
|
echo -e " Status: ${GREEN}RUNNING${NC}"
|
|
|
|
# Get uptime
|
|
local uptime=$(systemctl show "$service_name" -p ActiveEnterTimestamp --value)
|
|
if [ -n "$uptime" ]; then
|
|
echo -e " Uptime: ${uptime}"
|
|
fi
|
|
|
|
# Get PID
|
|
local pid=$(systemctl show "$service_name" -p MainPID --value)
|
|
if [ "$pid" != "0" ]; then
|
|
echo -e " PID: ${pid}"
|
|
fi
|
|
else
|
|
all_running=false
|
|
echo -e " ${RED}●${NC} ${BOLD}${service_desc}${NC}"
|
|
echo -e " Status: ${RED}STOPPED${NC}"
|
|
|
|
# Check if failed
|
|
if systemctl is-failed --quiet "$service_name"; then
|
|
echo -e " ${RED}[FAILED]${NC} - Service has errors"
|
|
fi
|
|
fi
|
|
echo ""
|
|
elif service "$service_name" status &>/dev/null; then
|
|
# Fallback to service command for older systems
|
|
any_installed=true
|
|
if service "$service_name" status | grep -q "running"; then
|
|
echo -e " ${GREEN}●${NC} ${BOLD}${service_desc}${NC}"
|
|
echo -e " Status: ${GREEN}RUNNING${NC}"
|
|
else
|
|
all_running=false
|
|
echo -e " ${RED}●${NC} ${BOLD}${service_desc}${NC}"
|
|
echo -e " Status: ${RED}STOPPED${NC}"
|
|
fi
|
|
echo ""
|
|
fi
|
|
}
|
|
|
|
# Check each service
|
|
for service_entry in "${SERVICES[@]}"; do
|
|
IFS=':' read -r service_name service_desc <<< "$service_entry"
|
|
check_service_status "$service_name" "$service_desc"
|
|
done
|
|
|
|
# Check if Acronis is even installed
|
|
if [ "$any_installed" = false ]; then
|
|
echo -e "${YELLOW}${BOLD}⚠ Acronis Agent Not Installed${NC}"
|
|
echo ""
|
|
echo "Acronis Cyber Protect is not installed on this system."
|
|
echo ""
|
|
echo "To install:"
|
|
echo " 1. Return to Backup & Recovery menu"
|
|
echo " 2. Select 'Acronis Management'"
|
|
echo " 3. Choose 'Install Acronis Agent'"
|
|
echo ""
|
|
press_enter
|
|
exit 0
|
|
fi
|
|
|
|
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
|
echo ""
|
|
|
|
# Overall status summary
|
|
if [ "$all_running" = true ]; then
|
|
echo -e "${GREEN}${BOLD}✓ All Services Running${NC}"
|
|
echo ""
|
|
echo "Acronis Cyber Protect is operational and ready for backups."
|
|
else
|
|
echo -e "${YELLOW}${BOLD}⚠ Some Services Not Running${NC}"
|
|
echo ""
|
|
echo "Some Acronis services are stopped. You may want to:"
|
|
echo " • Start services: Select 'Service Management' from Acronis menu"
|
|
echo " • Check logs: Select 'View Logs' for error details"
|
|
echo " • Restart services: Try restarting all services"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Check agent registration status
|
|
echo -e "${BOLD}Agent Registration:${NC}"
|
|
if [ -f "/var/lib/Acronis/BackupAndRecovery/MMS/user.config" ]; then
|
|
# Check for registration info in user.config
|
|
if grep -q "<registration>" "/var/lib/Acronis/BackupAndRecovery/MMS/user.config" 2>/dev/null; then
|
|
reg_address=$(grep -oP '<address>\K[^<]+' /var/lib/Acronis/BackupAndRecovery/MMS/user.config 2>/dev/null)
|
|
reg_env=$(grep -oP '<environment>\K[^<]+' /var/lib/Acronis/BackupAndRecovery/MMS/user.config 2>/dev/null)
|
|
|
|
if [ -n "$reg_address" ]; then
|
|
echo -e " ${GREEN}✓${NC} Agent is registered with Acronis Cloud"
|
|
echo -e " URL: ${reg_address}"
|
|
[ -n "$reg_env" ] && echo -e " Environment: ${reg_env}"
|
|
else
|
|
echo -e " ${YELLOW}⚠${NC} Registration incomplete"
|
|
fi
|
|
else
|
|
echo -e " ${YELLOW}⚠${NC} Agent not registered"
|
|
fi
|
|
else
|
|
echo -e " ${YELLOW}⚠${NC} Configuration file not found"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Check active ports
|
|
echo -e "${BOLD}Network Connectivity:${NC}"
|
|
|
|
# Check for actual Acronis listening ports (deduplicate IPv4/IPv6)
|
|
acronis_ports=$(netstat -tlnp 2>/dev/null | grep -E "(acronis|mms|aakore)" | awk '{
|
|
split($4, addr, ":");
|
|
port = addr[length(addr)];
|
|
if (!seen[port]++) {
|
|
print $4 " " $7;
|
|
}
|
|
}')
|
|
|
|
if [ -n "$acronis_ports" ]; then
|
|
echo "Active Acronis services:"
|
|
echo "$acronis_ports" | while read -r addr process; do
|
|
port=$(echo "$addr" | grep -oP ':\K[0-9]+$')
|
|
if echo "$addr" | grep -q "127.0.0.1\|::1"; then
|
|
# Local-only port
|
|
if [ "$port" = "9850" ]; then
|
|
echo -e " ${GREEN}✓${NC} Port $port (localhost) - MMS Service"
|
|
else
|
|
echo -e " ${GREEN}✓${NC} Port $port (localhost) - $(basename "$process" | cut -d/ -f2)"
|
|
fi
|
|
else
|
|
echo -e " ${GREEN}✓${NC} Port $port - $(basename "$process" | cut -d/ -f2)"
|
|
fi
|
|
done
|
|
else
|
|
echo -e " ${YELLOW}⚠${NC} No Acronis ports detected"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Check outbound connectivity to cloud (port 443)
|
|
echo ""
|
|
echo -e "${BOLD}Cloud Connectivity Test:${NC}"
|
|
|
|
if command -v curl >/dev/null 2>&1; then
|
|
reg_url=$(grep -oP '<address>\K[^<]+' /var/lib/Acronis/BackupAndRecovery/MMS/user.config 2>/dev/null)
|
|
if [ -n "$reg_url" ]; then
|
|
echo -n " Testing ${reg_url}... "
|
|
|
|
http_code=$(timeout 5 curl -s -o /dev/null -w "%{http_code}" "$reg_url" 2>/dev/null)
|
|
|
|
if [ "$http_code" -ge 200 ] && [ "$http_code" -lt 500 ]; then
|
|
echo -e "${GREEN}✓ Reachable${NC} (HTTP $http_code)"
|
|
else
|
|
echo -e "${RED}✗ Unreachable${NC}"
|
|
echo -e " ${YELLOW}⚠${NC} Cannot reach Acronis cloud (firewall/network issue)"
|
|
echo " • Check internet connectivity"
|
|
echo " • Verify firewall allows HTTPS (port 443)"
|
|
echo " • Test manually: curl -I $reg_url"
|
|
fi
|
|
else
|
|
echo -e " ${YELLOW}⚠${NC} Cloud URL not found in config"
|
|
fi
|
|
else
|
|
echo -e " ${YELLOW}⚠${NC} curl not installed (cannot test connectivity)"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Check cloud storage quota
|
|
echo -e "${BOLD}Cloud Backup Storage:${NC}"
|
|
if command -v acrocmd >/dev/null 2>&1; then
|
|
vault_info=$(acrocmd list vaults 2>/dev/null | tail -n +3 | head -1)
|
|
|
|
if [ -n "$vault_info" ]; then
|
|
# Extract storage info from vault output
|
|
vault_name=$(echo "$vault_info" | awk '{print $1}')
|
|
vault_free_val=$(echo "$vault_info" | awk '{print $4}')
|
|
vault_free_unit=$(echo "$vault_info" | awk '{print $5}')
|
|
vault_occupied=$(echo "$vault_info" | awk '{print $6, $7}')
|
|
|
|
echo -e " Vault: ${vault_name}"
|
|
echo -e " Available: ${vault_free_val} ${vault_free_unit}"
|
|
|
|
# Show occupied if available, otherwise note it's not synced
|
|
if [ "$vault_occupied" != "0 GB" ]; then
|
|
echo -e " Used: ${vault_occupied}"
|
|
else
|
|
echo -e " Used: ${DIM}(Check web console for accurate usage)${NC}"
|
|
fi
|
|
else
|
|
echo -e " ${YELLOW}⚠${NC} No vault information available"
|
|
echo -e " ${DIM}(Cloud storage visible after first backup)${NC}"
|
|
fi
|
|
else
|
|
echo -e " ${YELLOW}⚠${NC} acrocmd not available"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Check local disk space
|
|
echo -e "${BOLD}Local Storage Status:${NC}"
|
|
if [ -d "/var/lib/Acronis" ]; then
|
|
backup_dir_size=$(du -sh /var/lib/Acronis 2>/dev/null | awk '{print $1}')
|
|
echo -e " Agent data: ${backup_dir_size} (local cache/logs/config)"
|
|
|
|
# Check free space on partition
|
|
free_space=$(df -h /var/lib/Acronis | tail -1 | awk '{print $4}')
|
|
use_percent=$(df -h /var/lib/Acronis | tail -1 | awk '{print $5}' | tr -d '%')
|
|
|
|
echo -e " Free space: ${free_space} (on root partition)"
|
|
|
|
if [ -n "$use_percent" ] && [ "$use_percent" -gt 90 ] 2>/dev/null; then
|
|
echo -e " ${RED}⚠ Warning: Disk usage at ${use_percent}%${NC}"
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
press_enter
|