Tutoriales

Use Cron para monitorear los scripts de Bash de salud de Linux todos los días

Administrar los servidores de Linux todos los días puede ser divertido y estresante, especialmente si se ocupa de caídas inesperadas o fallas en el servicio. Una cosa que he aprendido en Linux Sysadmin durante 15 años es: La prevención es mejor que la cura.

No desea esperar a que el usuario informe el problema. Como Sysadmin, su objetivo debe ser detectar problemas antes de afectar al usuario o la carga de trabajo de producción.

Es por eso que siempre le recomiendo que realice controles diarios de salud en su sistema. Si sabe de antemano que el espacio del disco se está ejecutando o el servicio falla, puede solucionarlo antes de que el usuario comience a gritar.

En este tutorial, te mostraré cómo:

  • Cree un script bash simple pero poderoso para verificar la salud crítica del sistema.
  • Establecer para correr con Cron todos los días.
  • Obtenga el informe por correo electrónico (opcional).

Este script funciona bien en cualquier distribución popular de Linux y es adecuado para entornos de producción y configuración de VPS personales. Si bien la configuración inicial solo toma 10-15 minutos, puede ahorrar horas de fuera de línea.

¿Qué muestra el guión?

Publicaciones relacionadas

Aquí están los controles clave del sistema de salud que incluiremos en el script:

  • Uso de disco – Capture bajo espacio de almacenamiento antes de causar problemas.
  • Carga de la CPU – Se encontró una carga extremadamente alta en el servidor.
  • Uso de memoria – Determinar el estrés de memoria o la fuga.
  • Falló el servicio – Sepa si algún servicio Systemd se bloquea o falla en silencio.
  • Los primeros 5 procesos de memoria y deseo de CPU – Encuentra aplicaciones codiciosas.
  • Tiempo de actividad del sistema – Seguimiento de reinicios inesperados.
  • Actualizaciones de embalaje disponibles (opcional) -Ayuda a garantizar que el sistema sea seguro y actualizado.

Con esta lista, automáticamente tendrá una comprensión clara de la salud del sistema todos los días.

Paso 1: crear un guión de verificación de salud

Crear un nuevo archivo llamado System-health.sh En su directorio preferido, p. /opt/scripts.

sudo mkdir -p /opt/scripts
sudo nano /opt/scripts/system-health.sh

Ahora copie y pegue el siguiente script en él:

#!/bin/bash

# Author: Ravi Saive (Tecmint)
# Description: Simple System Health Check Script

LOGFILE="/var/log/system-health-$(date +%F).log"
HOSTNAME=$(hostname)
DATE=$(date)

{
echo "============================================"
echo " System Health Report for $HOSTNAME"
echo " Generated on: $DATE"
echo "============================================"

# Disk Usage
echo -e "\nDisk Usage:"
printf "%-20s %-10s %-10s %-10s %-6s %-s\n" "Filesystem" "Size" "Used" "Avail" "Use%" "Mounted on"
df -h --output=source,size,used,avail,pcent,target | tail -n +2

# CPU Load
echo -e "\nCPU Load (1/5/15 min average):"
uptime | awk -F'load average:' '{ print "  " $2 }'

# Memory Usage
echo -e "\nMemory Usage:"
free -h | awk 'NR==1 || /Mem|Swap/ { printf "  %-10s %-10s %-10s %-10s %-10s %-10s\n", $1, $2, $3, $4, $5, $6 }'

# Failed Services
echo -e "\nFailed Systemd Services:"
FAILED=$(systemctl --failed --no-legend)
if [ -z "$FAILED" ]; then
    echo "  No failed services."
else
    echo "$FAILED" | while read -r line; do
        echo "  $line"
    done
fi

# Top 5 Memory-Consuming Processes
echo -e "\nTop 5 Memory Consuming Processes:"
ps -eo user,pid,%cpu,%mem,command --sort=-%mem | head -n 6 | \
awk '{ printf "  %-10s %-6s %-6s %-6s %-s\n", $1, $2, $3, $4, substr($0, index($0,$5), 60) }'

# Top 5 CPU-Consuming Processes
echo -e "\nTop 5 CPU Consuming Processes:"
ps -eo user,pid,%cpu,%mem,command --sort=-%cpu | head -n 6 | \
awk '{ printf "  %-10s %-6s %-6s %-6s %-s\n", $1, $2, $3, $4, substr($0, index($0,$5), 60) }'

# Uptime
echo -e "\nSystem Uptime:"
echo "  $(uptime -p)"

# Package Updates
echo -e "\nAvailable Package Updates:"
if command -v apt &> /dev/null; then
    UPDATES=$(apt list --upgradable 2>/dev/null | grep -v "Listing...")
    if [ -z "$UPDATES" ]; then
        echo "  System is up to date."
    else
        echo "$UPDATES" | awk '{ print "  " $0 }'
    fi
elif command -v dnf &> /dev/null; then
    dnf check-update || echo "  System is up to date."
elif command -v yum &> /dev/null; then
    yum check-update || echo "  System is up to date."
else
    echo "  Package manager not supported."
fi

echo -e "\nEnd of Report"

} > "$LOGFILE"

# Optional: Send report via mail (if mail is configured)
MAIL_TO="[email protected]"
if command -v mail > /dev/null 2>&1; then
    mail -s "Daily Health Report for $HOSTNAME" "$MAIL_TO" 

Press CTRL+O, ENTER to save, CTRL+X to exit, and then make the script executable using:

sudo chmod +x /opt/scripts/system-health.sh

Paso 2: Prueba manualmente scripts (antes de la automatización)

Antes de dejarlo ir Kroner Para manejar esto, es mejor ejecutar el script manualmente para asegurarse de que todo funcione correctamente.

sudo /opt/scripts/system-health.sh

Debería ver un informe bien estructurado con información detallada sobre el uso del disco, la carga de la CPU, las estadísticas de memoria, los servicios fallidos y más.

cat /var/log/system-health-$(date +%F).log
Informe de salud del sistema

Si todo se ve bien, entonces puedes automatizarlo Kroner.

Paso 2: Configure el trabajo cron

Ahora que su script está listo, es hora de automatizarlo con Cron, una herramienta Linux incorporada que ejecuta tareas en los momentos programados.

Para ejecutar un script de control de salud todos los días a las 7 a.m., abra el crontab del usuario raíz. Cuando verificamos los recursos a nivel del sistema, es mejor ejecutar el script como root:

sudo crontab -e

En la parte inferior del archivo, agregue la siguiente línea:

0 7 * * * /opt/scripts/system-health.sh

Si desea guardar la salida o error del trabajo cron, puede modificar la línea de esta manera:

0 7 * * * /opt/scripts/system-health.sh >> /var/log/system-health-cron.log 2>&1

Paso 3: Configure el correo electrónico (opcional pero útil)

Si desea recibir informes por correo electrónico, asegúrese de que su servidor pueda enviar el correo en la mayoría de los sistemas, simplemente instale MailUtils Suficiente.

sudo apt install mailutils -y  [On Debian/Ubuntu]
sudo dnf install mailx -y      [On CentOS/RHEL]

También es posible que deba configurar sufijo o Ssmtp Corregir el correo electrónico de retransmisión, especialmente si está utilizando una VM en la nube.

Paso 4: Mostrar salud del sistema en MOTD (mensaje del día)

Un lector tiene una buena idea para mostrar una versión breve de esta verificación de salud. Motd Al iniciar sesión en el servidor, esta es una forma sabia de ver instantáneamente la salud del sistema sin ejecutar ningún comando.

Crear un peso ligero Motd Script y guarda este script como /etc/update-motd.d/99-system-health.

#!/bin/bash
# Lightweight System Health MOTD
# Author: Ravi Saive (Tecmint)

echo "==== 🩺 System Health: $(hostname) ===="
echo "🕒 Uptime: $(uptime -p)"
echo "💽 Disk: $(df -h / | awk 'NR==2 {print $5 " used on " $6}')"
echo "📊 CPU Load: $(uptime | awk -F'load average:' '{print $2}' | sed 's/^ //')"
echo "🧠 Memory: $(free -m | awk '/Mem:/ {print $3 "MB used / " $2 "MB total"}')"
FAILED=$(systemctl --failed --no-legend | wc -l)
echo "🚨 Failed Services: $FAILED"
echo "====================================="

Hacerlo ejecutable:

sudo chmod +x /etc/update-motd.d/99-system-health

Este método se puede usar Ubuntu y la dinámica del sistema con sede en Debian Motd Habilitado por defecto. Para otras distribuciones, puede incluir este script en .bashrc o .bash_profile.

Ahora, cada vez que ingrese al servidor, describirá rápidamente la salud de su sistema, ¡no se requieren pasos adicionales!

==== 🩺 System Health: server01 ====
🕒 Uptime: up 2 days, 4 hours
💽 Disk: 68% used on /
📊 CPU Load: 0.12, 0.21, 0.25
🧠 Memory: 842MB used / 1987MB total
🚨 Failed Services: 0
=====================================
en conclusión

Con esta configuración Bash Script + Cron, puede automatizar las verificaciones de salud diarias y enviar informes ordenados directamente a su bandeja de entrada. Ya no adivina si su disco está lleno o si el servicio ha fallado en silencio en el fondo.

Funciona todos los días y te da tranquilidad.

💬 Si le gusta esta publicación o hace sugerencias de mejora, no dude en comentar a continuación.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba