0Pricing
Linux Server Deployment & SSH Mastery · Lección

Gestión de errores y registros en scripts

Implemente una gestión sólida de errores, redirija la salida de los scripts y genere registros útiles para supervisar su ejecución y solucionar problemas.

Gestión de errores y registros en scripts es una lección gratuita de Linux Server Deployment & SSH Mastery en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Linux Server Deployment & SSH Mastery, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Linux Server Deployment & SSH Mastery incluye 4 lecciones en total.

Haga que sus scripts sean fiables

Imagine que su script se ejecuta en un servidor y realiza una tarea importante. ¿Qué ocurre si algo sale mal?

  • ¿Falla silenciosamente?
  • ¿Deja un desastre tras de sí?
  • ¿Puede saber cuándo y por qué ha fallado?

Los scripts robustos gestionan los errores correctamente y proporcionan registros claros. ¡En esta lección aprenderá a hacerlo!

Comprender los códigos de salida

Todos los comandos y scripts de Linux devuelven un código de salida (o estado de salida) cuando terminan. Este número indica si la operación se realizó correctamente o falló.

  • 0: Indica que la operación se realizó correctamente. Todo salió bien.
  • 1-255: Indica un fallo. Un número específico puede señalar el tipo de error.

Veámoslo en acción:

#!/bin/bash
# This script demonstrates exit codes

echo "Attempting a successful command..."
ls /tmp
echo "Exit code for 'ls /tmp': $?"

echo

echo "Attempting a failing command..."
ls /nonexistent_directory
echo "Exit code for 'ls /nonexistent_directory': $?"

Comprobar el estado de un comando

Después de ejecutar cualquier comando, puede comprobar su código de salida mediante la variable especial $?. Esto resulta muy útil para tomar decisiones en su script.

Puede usar una instrucción if para reaccionar ante el éxito o el fallo:

#!/bin/bash
# Check if a file exists before trying to read it

FILENAME="test_file.txt"
touch $FILENAME # Create it for success case

if [ -f "$FILENAME" ]; then
  echo "File '$FILENAME' exists. Processing..."
  # ... do something with the file ...
  rm $FILENAME # Clean up
else
  echo "Error: File '$FILENAME' not found!"
  exit 1
fi

echo "Script finished."

`set -e`: salir al producirse un error

En los scripts sencillos, comprobar manualmente $? en todas partes puede resultar tedioso. El comando set -e cambia el comportamiento de su script:

  • Si algún comando termina con un estado distinto de cero (falla), el script finaliza inmediatamente.
  • Esto evita que el script continúe con datos potencialmente dañados o en un estado no válido.

Pruebe a ejecutar este script. ¿Qué ocurre si falla el comando cp?

#!/bin/bash
set -e

echo "Starting important operations..."
mkdir my_temp_dir
cp /nonexistent_source my_temp_dir/target # This will fail

echo "This line will not be reached if cp fails."
rmdir my_temp_dir
echo "Script finished successfully."

`trap` para la limpieza

A veces, aunque un script falle, debe realizar tareas de limpieza, como eliminar archivos temporales. El comando trap permite capturar señales (como una salida o un error) y ejecutar un comando.

  • EXIT: Se ejecuta cuando el script termina, independientemente de si lo hace correctamente o con errores.
  • ERR: Se ejecuta cuando un comando termina con un estado distinto de cero (si set -e está activo).

En este caso, nos aseguramos de que siempre se elimine un directorio temporal:

#!/bin/bash

TEMP_DIR="/tmp/my_script_temp_$(date +%s)"

function cleanup {
  echo "Cleaning up temporary directory: $TEMP_DIR"
  rm -rf "$TEMP_DIR"
}

trap cleanup EXIT

mkdir "$TEMP_DIR"
echo "Working in $TEMP_DIR..."
# Simulate some work, maybe it fails
# cp /nonexistent_file "$TEMP_DIR/" # Uncomment to test failure

echo "Script completed."

Redirigir la salida

Cuando se ejecuta su script, normalmente muestra mensajes. Estos pertenecen principalmente a dos tipos:

  • Salida estándar (stdout): Mensajes normales (descriptor de archivo 1).
  • Error estándar (stderr): Mensajes de error (descriptor de archivo 2).

Puede redirigir estos flujos a archivos en lugar de mostrarlos en pantalla:

  • command > file: Redirige stdout a file.
  • command 2> file: Redirige stderr a file.

Guardemos por separado los mensajes de éxito y de error.

#!/bin/bash
# Redirect stdout to success.log and stderr to error.log

echo "This is a success message." > success.log
ls /nonexistent_path 2> error.log

echo "Check success.log and error.log files."
# To view them after running:
# cat success.log
# cat error.log

Toda la salida en un solo archivo

A menudo resulta útil tener tanto la salida estándar como el error estándar en un único archivo de registro para facilitar su revisión. Hay un par de formas de hacerlo:

  • command > file 2>&1: Redirige stdout a file y, después, redirige stderr al destino de stdout (el archivo).
  • command &> file: Una sintaxis más breve y moderna para hacer lo mismo.

Esto resulta ideal para crear un registro completo de la ejecución de su script.

#!/bin/bash
# Redirect both stdout and stderr to a single log file

LOG_FILE="combined_script.log"

echo "Starting script..." &> "$LOG_FILE"
echo "This message goes to stdout." &>> "$LOG_FILE"
ls /nonexistent_dir 2>&1 | tee -a "$LOG_FILE"
echo "Script finished." &>> "$LOG_FILE"

echo "Check the '$LOG_FILE' file for all output."

Añadir marcas de tiempo a los registros

Al depurar, es fundamental saber cuándo ocurrió un evento. Añadir marcas de tiempo a los mensajes de registro hace que sean mucho más útiles.

Puede anteponer la fecha y hora actuales a cada entrada del registro mediante el comando date. Esto ayuda a rastrear los eventos en orden cronológico.

#!/bin/bash

LOG_FILE="timestamped_script.log"

function log_message {
  echo "$(date +%Y-%m-%d_%H:%M:%S) - $1" &>> "$LOG_FILE"
}

log_message "Script started."
sleep 1
log_message "Performing task A..."
# Simulate an error
ls /no_such_place || log_message "Error: Command failed."
sleep 1
log_message "Script finished."

echo "Check '$LOG_FILE' for timestamped entries."

Enviar a los registros del sistema con `logger`

Para eventos importantes, puede que quiera enviar los mensajes directamente al sistema de registro del sistema (syslog). El comando logger hace exactamente eso.

  • Los registros del sistema suelen gestionarse con herramientas como journalctl (en sistemas systemd).
  • Esto centraliza los mensajes importantes de su script junto con otros eventos del sistema.
  • Resulta útil para errores críticos o registros de auditoría.

Los mensajes enviados con logger pueden consultarse mediante journalctl -f o tail -f /var/log/syslog (según el sistema).

#!/bin/bash
# Send a message to system logs

SCRIPT_NAME="MyBackupScript"

logger -t "$SCRIPT_NAME" "Starting daily backup operation."

# Simulate a task
sleep 2
if [ $(($RANDOM % 2)) -eq 0 ]; then
  logger -t "$SCRIPT_NAME" -p user.info "Backup successful."
else
  logger -t "$SCRIPT_NAME" -p user.err "Backup failed: Disk full."
fi

echo "Messages sent to system logs. Check with 'journalctl -t $SCRIPT_NAME'."

Comprobación de gestión de errores

Ha escrito un script de Bash para procesar algunos archivos. Quiere que el script termine inmediatamente si falla cualquier comando que contenga y también asegurarse de que se limpie un directorio temporal independientemente de cómo termine el script.

¿Qué dos comandos de Bash usaría principalmente para conseguirlo?

Repaso y próximos pasos

¡Ha aprendido a hacer que sus scripts de Bash sean más robustos y fáciles de depurar!

  • Códigos de salida: Comprender el éxito o el fallo de los comandos.
  • set -e: Salir automáticamente cuando se produce un error.
  • trap: Realizar acciones de limpieza al terminar el script.
  • Redirección de la salida: Controlar el destino de stdout y stderr.
  • Marcas de tiempo: Añadir contexto a los registros.
  • logger: Integrarse con el registro de todo el sistema.

Al aplicar estas técnicas, sus tareas automatizadas serán más fiables y fáciles de gestionar. ¡Siga practicando para crear una automatización realmente resistente!

Preguntas frecuentes

¿La lección «Gestión de errores y registros en scripts» es gratis?

Sí — el texto completo de «Gestión de errores y registros en scripts» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Linux Server Deployment & SSH Mastery, actualiza a CoddyKit PRO. El curso de Linux Server Deployment & SSH Mastery incluye 4 lecciones en total.

¿Qué aprenderé en «Gestión de errores y registros en scripts»?

Implemente una gestión sólida de errores, redirija la salida de los scripts y genere registros útiles para supervisar su ejecución y solucionar problemas. Practicas Linux Server Deployment & SSH Mastery con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Linux Server Deployment & SSH Mastery?

No se requiere experiencia previa. Linux Server Deployment & SSH Mastery en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Gestión de errores y registros en scripts»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Linux Server Deployment & SSH Mastery?

Sí. Cada lección de Linux Server Deployment & SSH Mastery incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Introducción a los scripts de Bash
  2. Automatización de tareas del servidor
  3. Gestión de errores y registros en scripts
  4. Funciones, argumentos y scripts reutilizables
← Volver a Linux Server Deployment & SSH Mastery