linux – ¿Cómo puedo registrar completamente todas las acciones de los scripts de bash?

Pregunta:

Desde la salida de mi script, quiero capturar TODOS los datos de los registros con mensajes de error y redirigirlos a todos al archivo de registro.

Tengo un script como el siguiente:

#!/bin/bash
(
echo " `date` : part 1 - start "
ssh -f admin@server.com 'bash /www/htdocs/server.com/scripts/part1.sh logout exit'
echo " `date` : sleep 120"
sleep 120
echo " `date` : part 2 - start"
ssh admin@server.com 'bash /www/htdocs/server.com/scripts/part2.sh logout exit'
echo " `date` : part 3 - start"
ssh admin@server.com 'bash /www/htdocs/server.com/scripts/part3.sh logout exit'
echo " `date` : END"
) | tee -a /home/scripts/cron/logs

Quiero ver todas las acciones en el archivo /home/scripts/cron/logs

Pero solo veo esto lo que puse después del comando echo .

¿Cómo registrar los registros de que el comando SSH fue exitoso?

Necesito reunir todos los registros. Necesito esto para monitorear el resultado de cada comando en mi script, para analizar mejor lo que está sucediendo mientras el script falla.

Respuesta:

Por lo general, coloco algo similar a lo siguiente al principio de cada script (especialmente si se ejecutará como un demonio):

#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>log.out 2>&1
# Everything below will go to the file 'log.out':

Explicación:

  1. exec 3>&1 4>&2

    Guarda los descriptores de archivos para que puedan restaurarse a lo que eran antes de la redirección o usarse ellos mismos para mostrar lo que eran antes de la siguiente redirección.

  2. trap 'exec 2>&4 1>&3' 0 1 2 3

    Restaurar descriptores de archivos para señales particulares. Generalmente no es necesario, ya que deben restaurarse cuando sale el sub-shell.

  3. exec 1>log.out 2>&1

    Redirigir stdout al archivo log.out luego redirigir stderr a stdout . Tenga en cuenta que el orden es importante cuando desea que vayan al mismo archivo. stdout debe ser redirigido antes de que stderr sea ​​redirigido a stdout .

A partir de ese momento, para ver la salida en la consola (tal vez), simplemente puede redirigir a &3 . Por ejemplo,

echo "$(date) : part 1 - start" >&3

irá a donde se haya dirigido stdout , presumiblemente a la consola, antes de ejecutar la línea 3 anterior.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım