¿Cómo verificar el registro de tiempo de ejecución de un trabajo por lotes enviado mediante el comando `at`?

¿Cómo verificar el registro de tiempo de ejecución de un trabajo por lotes enviado mediante el comando `at`?

Envío el trabajo por lotes en Ubuntu 20.

at now -f myscript.sh

Recibo un correo electrónico con un registro cuando se completa el trabajo. Pero para un trabajo que requiere mucho tiempo, me gustaría ver avances durante la ejecución. ¿Cómo puedo hacer eso?

Respuesta1

Esto será muy detallado, sin embargo, si agrega -x al shell en la primera línea de myscript.sh, le mostrará la ejecución línea por línea de su script. El resultado se enviará por correo electrónico al usuario que envía el trabajo y también estará presente en el registro cron.

Ejemplo, #!/bin/sh -x en lugar de #!/bin/sh

Mientras el trabajo está en progreso, simplemente siga el registro cron y podrá ver el progreso. Recuerde, ¡esto producirá una gran cantidad de datos de registro! ¿Puede optar por modificar su script para mostrar el progreso a lo largo del camino de alguna manera? echo "terminado el desmontaje, comenzando la configuración de xxx"

Respuesta2

La atherramienta captura la salida estándar del proceso y luego la envía como registro. Entonces, sin cambios significativos en el, atno es posible leer ese registro tal como está escrito.

Pero puedes solucionarlo con un segundo registro. Simplemente imprima el registro de 'progreso' en el archivo con un nombre conocido. Después de eso, puedes tail -fhacerlo si quieres o ignorarlo.

En otras palabras, el script que ejecutarías atsería algo como:

#!/bin/sh
echo Started at `date` 
echo Started at `date` > /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc
echo Completed at `date` with return code $rc >> /var/myscript.log

En este caso, tendría un registro corto (con solo dos líneas) para atenviarle por correo y todo el registro de la parte interna de larga duración.

Como extensión de este enfoque, puede utilizar tee. Permite duplicar la salida estándar en el archivo. Lo que a su vez puede ayudar con la duplicación de la impresión de mensajes de registro en el script.

#!/bin/sh
echo Started at `date` | tee /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc | tee -a /var/myscript.log

información relacionada