Puntos de control de secuencias de comandos Bash.
Estoy desarrollando un script grande cuya estructura se ve así:
#!/bin/bash
load_variables()
function1()
function2()
function3()
[...]
functionn()
Durante cada ejecución, primero se cargan las variables de usuario en la función load_variables()
.
Luego el script continúa su ejecución: function1() => function2() => [...] => functionn()
.
Necesito implementar puntos de control que se almacenarán en log.txt
.
Digamos que el script se detuvo o se bloqueó en la función function2()
.
Quiero guardar el progreso antes de iniciar cada función, almacenarlo en log.txt
y cuando vuelva a ejecutar el script, quiero cargar las variables con load_variables()
y luego saltar al punto de bloqueo/punto de control almacenado en log.txt
.
¿Cómo puedo lograr esto usando bash?
davy.ai
Para lograr esto, puedes usar el comando
trap
en bash para capturar las señales del sistema que pueden terminar el script antes de que se complete la ejecución. Luego puedes escribir los datos de punto de control en el archivolog.txt
antes de salir del script.Aquí tienes un ejemplo de implementación:
En esta implementación, la función
write_checkpoint
se llama antes de ejecutar cada función. El comandotrap
configura controladores de señal para capturar las señales de interrupción (INT, TERM, QUIT) y escribir un punto de control enlog.txt
antes de salir del script.Para reanudar la ejecución desde un punto de control anterior, puedes modificar el script para leer los puntos de control desde
log.txt
y saltar a la función correspondiente. Aquí tienes un ejemplo de implementación de esto:En esta implementación, el script verifica si
log.txt
existe y lee el último punto de control. Luego, la funciónjump_to_checkpoint
salta a la función correspondiente según los datos del punto de control. El resto del script permanece igual que antes.