From c88073d42293cde190487e935820df54d3350e72 Mon Sep 17 00:00:00 2001 From: Pipiasi Bogdan Date: Tue, 16 Dec 2025 15:29:32 +0100 Subject: [PATCH] better doc --- install.sh | 96 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 19 deletions(-) diff --git a/install.sh b/install.sh index 39d4aae..ddbdeb4 100644 --- a/install.sh +++ b/install.sh @@ -1,107 +1,160 @@ #!/bin/bash +# Oprește execuția imediat dacă apare orice eroare set -e +# ============================ +# VARIABILE GLOBALE +# ============================ + +# Directorul unde va fi instalat agentul INSTALL_DIR="/opt/server-monitor" + +# Scriptul agentului care va rula periodic AGENT="$INSTALL_DIR/monitor-agent.sh" + +# Fișierul de configurare (permisiuni restrictive) CONFIG="$INSTALL_DIR/config.env" + +# Comanda rulată din cron (fără output) CRON_CMD="$AGENT >/dev/null 2>&1" + +# Endpoint API unde se trimit datele API_URL="https://itschool.pbcv.dev/api/report.php" # ============================ -# CHECK ROOT +# VERIFICARE PERMISIUNI ROOT # ============================ + +# Scriptul trebuie rulat ca root (cron, /opt, system info) if [[ $EUID -ne 0 ]]; then - echo " Run as root (sudo)" + echo "Run as root (sudo)" exit 1 fi -echo " Installing Server Monitor Agent (IPv4 only)..." +echo "Installing Server Monitor Agent (IPv4 only)..." # ============================ -# CREATE DIR +# CREARE DIRECTOR DE INSTALARE # ============================ + +# Creează directorul dacă nu există mkdir -p "$INSTALL_DIR" + +# Permisiuni standard pentru directoare de sistem chmod 755 "$INSTALL_DIR" # ============================ -# CONFIG FILE +# FIȘIER CONFIGURARE # ============================ + +# Stocăm variabilele configurabile separat +# (bun pentru securitate și extensibilitate) cat > "$CONFIG" < "$AGENT" <<'EOF' #!/bin/bash set -e +# Importă configurația source /opt/server-monitor/config.env +# Numele mașinii HOSTNAME=$(hostname) # ============================ # CPU # ============================ + +# Load average (1 minut) CPU_LOAD=$(uptime | awk -F'load average:' '{print $2}' | cut -d',' -f1 | xargs) + +# Număr de core-uri CPU CPU_CORES=$(nproc) # ============================ -# RAM / SWAP +# MEMORIE RAM / SWAP (MB) # ============================ + +# RAM total și utilizat RAM_TOTAL=$(free -m | awk '/Mem:/ {print $2}') RAM_USED=$(free -m | awk '/Mem:/ {print $3}') +# SWAP total și utilizat SWAP_TOTAL=$(free -m | awk '/Swap:/ {print $2}') SWAP_USED=$(free -m | awk '/Swap:/ {print $3}') # ============================ -# DISK (KB) +# DISK (KB, partiția /) # ============================ + DISK_TOTAL=$(df -k / | awk 'NR==2 {print $2}') DISK_USED=$(df -k / | awk 'NR==2 {print $3}') # ============================ -# NETWORK (IPv4 ONLY) +# NETWORK – IPv4 ONLY # ============================ + +# Detectează interfața activă IPv4 IFACE=$(ip -4 route get 1.1.1.1 2>/dev/null | awk '{print $5; exit}') + +# Trafic RX / TX (bytes) RX_BYTES=$(cat /sys/class/net/$IFACE/statistics/rx_bytes) TX_BYTES=$(cat /sys/class/net/$IFACE/statistics/tx_bytes) # ============================ -# PROCESSES +# PROCESE # ============================ + +# Număr total de procese PROC_TOTAL=$(ps ax --no-headers | wc -l) + +# Procese zombie (Z) PROC_ZOMBIE=$(ps axo stat | grep -c Z || true) # ============================ -# SYSTEMD +# SYSTEMD SERVICES # ============================ + +# Servicii systemd eșuate FAILED_SERVICES=$(systemctl --failed --no-legend 2>/dev/null | wc -l) # ============================ -# NETWORK PORTS (IPv4 ONLY) +# PORTURI DESCHISE (IPv4) # ============================ + +# Porturi ascultate TCP/UDP IPv4 OPEN_PORTS=$(ss -4 -lntu | tail -n +2 | wc -l) # ============================ -# OS / KERNEL +# OS / KERNEL / ARHITECTURĂ # ============================ + +# Nume OS (fallback dacă lsb_release nu există) OS_NAME=$(lsb_release -ds 2>/dev/null || grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '"') + KERNEL=$(uname -r) ARCH=$(uname -m) # ============================ # UPTIME # ============================ + UPTIME=$(uptime -p) # ============================ -# SEND DATA (IPv4 FORCED) +# TRIMITERE DATE CĂTRE API +# FORȚAT IPv4 (-4) # ============================ + curl -4 -s -X POST "$API_URL" \ -H "Content-Type: application/json" \ -d "{ @@ -136,20 +189,25 @@ curl -4 -s -X POST "$API_URL" \ }" EOF +# Permite execuția agentului chmod +x "$AGENT" # ============================ -# CRON (no duplicates) +# CRON JOB (FĂRĂ DUBLURI) # ============================ + ( + # Păstrează ce există deja, elimină dublurile crontab -l 2>/dev/null | grep -v "$AGENT" || true + # Rulează agentul la fiecare minut echo "* * * * * $CRON_CMD" ) | crontab - # ============================ # FINAL # ============================ -echo " Server Monitor installed successfully (IPv4 only)" -echo " Reporting to: $API_URL" -echo " Interval: every 1 minute" -echo " Test manual: $AGENT" + +echo "Server Monitor installed successfully (IPv4 only)" +echo "Reporting to: $API_URL" +echo "Interval: every 1 minute" +echo "Manual test: $AGENT"