Bash Script per Monitorare PC Linux + Notifiche Telegram
🖥️ Guida Completa al tuo System Monitor
Immagina di ricevere un messaggio su Telegram ogni volta che il tuo server inizia a surriscaldarsi, la RAM scoppia o il disco si sta riempiendo o inzia a fallare con la scrittura dei file.
E tutto questo senza installare software pesanti o dashboard complicate. Solo uno script Bash e un po’ di magia Linux.
💡 Benvenuti nella guida definitiva per costruire il tuo sistema di monitoraggio automatico!
🚀 Obiettivo del “progetto”
- Creare uno script Bash che monitora CPU, RAM, disco, temperatura, SMART e Docker
- Inviare report automatici su Telegram
- Capire ogni funzione, comando e parametro
- Configurare un log locale per la cronologia dei report
Non serve essere esperti di Bash: spiegherò ogni singola riga, così anche chi è alle prime armi potrà capire come funziona.
💡 TROVI LO SCRIPT PRONTO AL DOWNLOAD SUL MIO REPO GITHUB
https://github.com/EnthusiastNewbie/MyLab/tree/main/Script_Server_Monitor
🧩 1. Cos’è e come funziona
Il “Server Monitor System” è un semplice script Bash che:
- Legge lo stato del tuo sistema (CPU, RAM, dischi, Docker, ecc.)
- Confronta i valori con delle soglie impostate
- Genera un report completo
- Lo invia su Telegram con emoji, icone e colori per rendere tutto più leggibile
- Salva un log su file per consultazioni future
📩 Tutto avviene in automatico, anche da cron (quindi puoi ricevere un report ogni ora, giorno o settimana).

⚙️ 2. Configurazione di base
All’inizio dello script troviamo alcune variabili fondamentali:
TELEGRAM_TOKEN="INSERISCI QUI IL TUO TOKEN TELEGRAM"
CHAT_ID="INSERISCI QUI IL TUO CHAT ID"
NAS_PATH="/media/utente/HDD_NAS"
LOG_FILE="/home/utente/SCRIPT_REPORT_SERVER/server_report.log"
🔹 Cosa significano?
- TELEGRAM_TOKEN: il token che ottieni da @BotFather su Telegram, serve per inviare messaggi.
- CHAT_ID: è l’ID della chat (o gruppo) dove riceverai i report.
- NAS_PATH: percorso dove è montato il tuo NAS o disco esterno.
- LOG_FILE: file dove lo script salverà tutti i report generati.
💡 Consiglio: crea il file di log prima di lanciare lo script, con:
mkdir -p /home/utente/SCRIPT_REPORT_SERVER
touch /home/utente/SCRIPT_REPORT_SERVER/server_report.log
📊 3. Impostazione soglie di allerta
CPU_THRESHOLD=85
DISK_THRESHOLD=90
RAM_THRESHOLD=90
Queste variabili servono per definire le soglie oltre le quali scatta un’allerta.
- Se la CPU supera l’85% → 🔥
- Se la RAM è oltre il 90% → ⚠️
- Se il disco è quasi pieno → ⚠️
🧠 4. Icone e simboli
Nello script è presente una sezione delle emoji:
OK_ICON="✅"
WARN_ICON="⚠️"
ALERT_ICON="🔥"
DISK_ICON="💾"
CPU_ICON="🧠"
RAM_ICON="📊"
DOCKER_ICON="🐳"
TEMP_ICON="🌡️"
Servono solo a rendere il report più leggibile e simpatico, soprattutto su Telegram.
💬 5. La funzione di invio su Telegram
send_telegram_message() {
local text="$1"
curl -s -X POST "<https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage>" \\
-d chat_id="$CHAT_ID" \\
-d parse_mode="Markdown" \\
-d text="$text" > /dev/null
}
🔍 Cosa succede qui?
- Usa il comando curl per chiamare le API di Telegram.
- Invia un messaggio in formato Markdown (così puoi usare grassetto e corsivo).
- Tutto avviene in silenzio (
> /dev/null
serve a non mostrare output a schermo).
🧩 6. Funzioni di sistema
Ora arrivano le funzioni che leggono i dati reali dal sistema.
🔹 Uso della CPU
get_cpu_usage() {
top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}'
}
top -bn1
mostra l’uso della CPU in modalità batch (senza interfaccia).awk '{print 100 - $8}'
calcola la percentuale di utilizzo reale, sottraendo l’idle.
💡 Esempio: se la CPU è al 15% idle → l’utilizzo reale è 85%.
🔹 Uso della RAM
get_ram_usage() {
free | awk '/Mem:/ {printf("%.0f", $3/$2 * 100)}'
}
free
mostra la memoria usata e disponibile.$3/$2 * 100
calcola la percentuale usata.
🔹 Stato del disco
get_disk_usage_percent() { ... }
get_disk_free_gb() { ... }
df
mostra lo spazio su disco.awk 'NR==2 {print $5}'
estrae solo la percentuale.tr -d '%'
rimuove il simbolo%
per facilitare i calcoli.
💾 Esempio: 87% di utilizzo → allerta se supera la soglia impostata.
🔹 Temperatura CPU
get_cpu_temp() {
sensors | awk '/Package id 0:/ {print $4}' | head -n1
}
Richiede il pacchetto lm-sensors
.
Ti mostra la temperatura della CPU, utile per capire se la ventilazione funziona.
🔹 Stato SMART dei dischi
smartctl -H /dev/sda
Utilizza il tool smartmontools
per verificare la salute dei dischi.
Se il disco mostra “PASSED” → tutto ok ✅
Se mostra errori → è ora di fare un backup 😬
🔹 Processi più pesanti
ps -eo comm,%cpu --sort=-%cpu | awk 'NR>1 && NR<=6 {...}'
Elenca i 5 processi che stanno usando più CPU o RAM.
Molto utile per capire chi sta stressando il sistema.
🔹 Stato Docker
/usr/bin/docker ps -a --format "table {{.Names}}\\t{{.Status}}"
Controlla se i container sono Up o Offline.
Perfetto se usi Docker per servizi self-hosted.
🐳 Esempio: “nginx-proxy-manager — ✅ Online”
📦 7. La funzione send_report
È il cuore dello script ❤️
Qui vengono chiamate tutte le funzioni precedenti, i valori vengono confrontati con le soglie e infine viene inviato il report.
- Raccolta dati (CPU, RAM, dischi, Docker, SMART)
- Costruzione del messaggio con
printf
- Log automatico nel file
server_report.log
- Invio del messaggio via Telegram con
send_telegram_message
📜 8. Esecuzione manuale e automatica
Per testarlo subito:
bash server_monitor.sh
Se funziona, puoi programmarlo con cron:
crontab -e
E aggiungi ad esempio:
0 * * * * /home/utente/SCRIPT_REPORT_SERVER/server_monitor.sh
💡 Questo comando invia un report ogni ora.
📈 9. Log e analisi
Nel file server_report.log
troverai una cronologia come questa:
22/10/2025 10:30:01 | CPU: 32 % | RAM: 58 % | Disco OS: 41 % | NAS: 70 % | CPU Temp: +47.0°C
Puoi aprirlo con cat
, less
, oppure usarlo per creare grafici nel tempo.
🔧 10. Strumenti usati
Comando | Descrizione |
---|---|
top | Mostra uso CPU in tempo reale |
free | Mostra RAM usata/disponibile |
df | Visualizza spazio disco |
sensors | Temperatura hardware |
smartctl | Stato SMART dischi |
ps | Lista processi attivi |
docker | Stato container |
curl | Invio dati via HTTP (usato per Telegram) |
🎨 11. Miglioramenti possibili
- Aggiungere grafici o HTML report
- Mappare i dispositivi connessi alla rete locale con ARP
- Inviare report anche via email
- Usare systemd timer al posto di cron
- Creare un pannello web per i log storici
🧾 12. Conclusione
Hai appena costruito un sistema di monitoraggio completo con solo uno script Bash!
✅ Leggero
✅ Automatico
✅ Personalizzabile
Perfetto per homelab, VPS, mini server casalinghi o Raspberry Pi.
Commento all'articolo