Cómo usar un script Bash para detectar fallos del sistema en Mac

La estabilidad del sistema es fundamental para los profesionales de TI, especialmente para los que gestionan varios dispositivos o prestan servicios de proveedor de servicios gestionados (MSP). Garantizar que los dispositivos funcionen sin problemas ni fallos inesperados puede evitar tiempos de inactividad, mantener la productividad y aumentar la satisfacción de los usuarios.

Esta guía explora un sencillo pero potente script diseñado para detectar fallos del sistema en macOS. Al comprender y aplicar este script, los profesionales de TI pueden gestionar y solucionar problemas del sistema de forma proactiva y eficaz.

Contexto

Las caídas del sistema pueden ser indicativas de problemas subyacentes de hardware o software. En macOS, los informes de fallos se generan y almacenan en directorios específicos, lo que ayuda a diagnosticar los problemas que causaron el fallo. Estos informes se presentan en varios formatos de archivo, como .ips, .panic y .crash, cada uno de los cuales ofrece distintos niveles de detalle sobre los incidentes.

Para los profesionales de TI y los MSP, disponer de una herramienta que pueda buscar automáticamente estos informes de fallos puede ahorrar mucho tiempo y esfuerzo. Este script ofrece una solución directa para identificar cualquier archivo de bloqueo creado en los últimos 180 días, lo que permite una intervención y resolución oportunas.

El script para detectar fallos del sistema

#!/usr/bin/env bash

# Description: Exits with a 1 if any crash files were created in the last 180 days. Be it .ips, .panic, or .crash under /Library/Logs/DiagnosticReports.
#
# Release Notes: Initial Release
# By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
# Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
# Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
# Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
# Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
# Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
# Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
# EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).

if [[ "${testForAppCrashes}" == "true" ]]; then
    ipsFiles=($(find "/Library/Logs/DiagnosticReports" -type f -name "*.ips" -mtime -180))
    for item in "${ipsFiles[@]}"; do
        echo "[Warn] Found ${item} ips file!"
    done
fi

panicFiles=($(find "/Library/Logs/DiagnosticReports" -type f -name "*.panic" -not -name "*.contents.panic" -mtime -180))
crashFiles=($(find "/Library/Logs/DiagnosticReports" -type f -name "*.crash" -mtime -180))

for item in "${panicFiles[@]}"; do
    echo "[Error] Found ${item} panic file!"
done

for item in "${crashFiles[@]}"; do
    echo "[Error] Found ${item} crash file!"
done

if [ ${#ipsFiles[@]} -gt 0 ] || [ ${#panicFiles[@]} -gt 0 ] || [ ${#crashFiles[@]} -gt 0 ]; then
    exit 1
else
    echo "No crash files found."
    exit 0
fi

 

Análisis detallado

El script está escrito en Bash y realiza las siguientes funciones clave:

  1. Configuración del entorno: la línea shebang especifica el intérprete del script, asegurando que se ejecuta con la configuración de entorno adecuada.
  2. Descripción y notas de la versión: los comentarios proporcionan una breve descripción del propósito del script y su historial de versiones.
  3. Comprobación condicional de caídas de la aplicación: si la variable de entorno testForAppCrashes está establecida en true, el script busca archivos .ips (que indican caídas de la aplicación) creados en los últimos 180 días y los lista.
  4. Búsqueda de archivos de pánico y colisión: estos comandos localizan los archivos .panic y .crash, excluyendo los archivos denominados *.contents.panic, dentro del marco temporal especificado.
  5. Registro de archivos detectados: el script para detectar fallos del sistema muestra advertencias y errores para cada archivo detectado, proporcionando información inmediata al usuario.
  6. Estado de salida en función de los resultados: dependiendo de si se ha encontrado algún archivo crash, el script sale con el estado 1 (indicando problemas) o 0 (indicando que no hay problemas).

Posibles casos de uso

Estudio de caso: Gestión proactiva de las TI

Un profesional de TI que gestione una flota de ordenadores Mac en un entorno corporativo podría utilizar este script para comprobar regularmente si se han producido fallos recientemente. Programando este script para que se ejecute diariamente mediante una tarea cron, puede asegurarse de que se le notifica inmediatamente cualquier nuevo informe de caída. Esto permite solucionar rápidamente los problemas, minimizar el tiempo de inactividad y mantener la fiabilidad del sistema.

Comparaciones

Script vs. comprobación manual

La comprobación manual de los informes de colisión implica navegar hasta los directorios apropiados e inspeccionar los archivos, lo que puede llevar mucho tiempo y ser propenso a errores. Este script automatiza el proceso, garantizando la coherencia y la precisión.

Script vs. herramientas comerciales

Aunque existen herramientas comerciales que ofrecen una monitorización completa del sistema, este script proporciona una alternativa económica y ligera para la detección de fallos, especialmente adecuada para entornos informáticos más pequeños o casos de uso específicos en los que no se justifica una solución de monitorización completa.

FAQ

P: ¿Cómo se ejecuta este script para detectar fallos del sistema?

R: Guarda el script en un archivo, hazlo ejecutable con chmod +x nombrearchivo.sh y ejecútalo con ./filename.sh.

P: ¿Y si quiero buscar colisiones en un periodo de tiempo diferente?

R: Modifica el parámetro -mtime -180 al número de días deseado.

P: ¿Se puede utilizar este script para detectar fallos del sistema en sistemas que no sean macOS?

R: No, este script está diseñado específicamente para macOS.

Implicaciones

La ejecución periódica de este script puede ayudar a identificar patrones de bloqueo recurrentes, lo que permite a los profesionales de TI abordar posibles problemas antes de que se agraven. La detección precoz de las caídas puede evitar fallos mayores del sistema y mantener un rendimiento óptimo y la satisfacción de los usuarios.

Recomendaciones

  • Automatiza la ejecución: programa el script para detectar fallos del sistema para que se ejecute a intervalos regulares mediante cron jobs.
  • Intégralo con herramientas de supervisión: combina este script para detectar fallos del sistema con otras soluciones de supervisión para obtener un enfoque integral.
  • Revisa los registros con regularidad: revisa periódicamente los registros de salida para asegurarte de que todos los problemas se resuelven con prontitud.

Reflexiones finales

La incorporación de este script para detectar fallos del sistema a tu conjunto de herramientas de gestión de TI puede mejorar significativamente tu capacidad para mantener la estabilidad del sistema y abordar los problemas de forma preventiva. Herramientas como NinjaOne pueden agilizar aún más estos procesos, proporcionando una plataforma unificada para la supervisión y gestión de múltiples dispositivos. Gracias a estas herramientas, los profesionales de TI pueden asegurarse de que están equipados para hacer frente a cualquier reto que surja, manteniendo unas operaciones fluidas y fiables.

Categorías:

Quizá también te interese…

×

¡Vean a NinjaOne en acción!

Al enviar este formulario, acepto la política de privacidad de NinjaOne.

Términos y condiciones de NinjaOne

Al hacer clic en el botón “Acepto” que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona “tal cual” y “según disponibilidad”, sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).