* Imagenes de instalación de las versiones estables para Mageia y OpenMandriva.

OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.

Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.

¿Como hago que un script se vuelva a ejecutar si falla?

Digamos que coloco esta orden en el planificador de tareas: sh /home/haydita/AyD/Extras/Script/grabardelplata.sh

Puede pasar, y pasa, que se corte; cómo puedo reinterar la orden sin sobreponerlas, es decir, que sean secuenciales, que no se cumpla la reinteración mientras funcione la primera.

No sé si logré explicarlo.

Opciones de visualización de comentarios

Seleccione la forma que desee de mostrar los comentarios y haga clic en «Guardar opciones» para activar los cambios.


Gravatar de Drivael

# 102941 Usa condicionales

Yo lo haría de dos formas, aunque las dos se basan en lo mismo. Pero bueno, depende que estás buscando precisamente.

  1. Usar dentro del propio script una condicional if para comprobar si el script se ha ejecutado correctamente. ¿Que hace tu script? ¿Crea ficheros, directorios o los borra, etc?. tendrías que comprobar que se ha llevado a cabo. En caso que no, usarías un else para volver a llamar al script.
  2. Tocaría hacer un script control... :). Entonces tienes tuscript.sh y luego tienes scriptcontrol.sh. Cuando se ejecute scriptcontrol.sh (este va como tarea de cron), comprobará un fichero "log.txt" que se ha de crear cuando tu script se haya ejecutado completamente. Si log.txt existe entonces no hace nada. Si log.txt no existe entonces llama - o vuelve a llamar - a tuscript.sh, hasta que se cumpla la condicion.

Para 1, sería algo así.

 if "miorden"
      
  then
  
     echo "Se ha cumplido la orden"
	
   else

    echo "No se a cumplido la orden, volviendo a llamar a tuscript.sh"
    sh tuscript.sh
fi

Para 2. Necesitas un fichero adicional: scriptcontrol.sh

#!/bin/sh

varctrl="log.txt" #Nombre de fichero a comprobar
if [ -f /home/algundir/otrodir/log.txt ]; then #comprueba que el fichero existe
  echo "Se ha cumplido la orden" # El fichero existe, el script se ha ejecutado.

else
  echo "No se a cumplido la orden, llama - o vuelve a llamar - a tuscript.sh"
  sh tuscript.sh

 fi

P.D: Volviendo a leer tu pregunta, me quedo con la opción dos. Pero habría que hacer algo más, me queda la sensación que no cubre todo el problema XD.

Nos cuentas.

Saludos!!!

Por un mundo suficiente y el tiempo.



Gravatar de Raúl Oliveira

# 102956 Voy probar

#!/bin/sh

if vamos a ver si sale bien
else Si no sale vuelvo al foro
fi







Raúl (arrobarrob)

Lo explico difícil, no sea que lo entiendan.



Gravatar de Raúl Oliveira

# 103421 volver a ejecutar script

El problema concreto es éste: El script graba un programa desde algún planificador  si no se corta la conexión. Si se corta, pretendo hacer que reinicie como Programa=delplata2 para no sobrescribir, si es posible con un sleep 7 entre medio. Estoy muy loco?

#!/bin/bash

emisora=mms://delplata.telecomdatacenter.com.ar/delplata
minutos=190
programa=delplata1
dir=/home/haydita
nombre=${dir}/${programa}_`date +%d-%m-%y`.mp3
[ -e /tmp/radio_pipe ] && rm /tmp/radio_pipe
mkfifo /tmp/radio_pipe
lame /tmp/radio_pipe $nombre 2>/dev/null 1>/dev/null &
mplayer $emisora -cache 32 -ao pcm:file=/tmp/radio_pipe 2>/dev/null </dev/null &
sleep $(($minutos * 60))
    kill %2
    rm /tmp/radio_pipe

Raúl (arrobarrob)

Lo explico difícil, no sea que lo entiendan.



Gravatar de drakedalfa

# 103432 Otro enfoque

Crea un segundo script que verifique cada N tiempo si aun esta corriendo el otro script y si no esta ejecutandose que lo vuelva a ejecutar.



Gravatar de Raúl Oliveira

# 103580 Qué expresión o sentencia uso?

Bien, pero...

Decime un poquito más, una orientación para investigar y experimentar.

Qué expresión, sentencia o instrucción uso?

Raúl (arrobarrob)

Lo explico difícil, no sea que lo entiendan.



Gravatar de drakedalfa

# 103581 Humm

Se me ocurre que:

watch 

te puede servir.



Gravatar de Raúl Oliveira

# 103972 Watch

Con watch armado o con watch comando logro saber si el script se detuvo, o sobrescribo lo ya grabado.

El problema es que si grabo un programa hasta un punto donde se corta, debería reactivar el script dándole otro nombre a la grabación posterior para no perder lo anterior.

Raúl (arrobarrob)

Lo explico difícil, no sea que lo entiendan.



Gravatar de drakedalfa

# 103975 Veamos

Lo que debes hacer es que el nombre del archivo incluya o bien la fecha y tiempo de cuando se inicio o quizas un numero de $ramdom para que no se sobre escriba.



Gravatar de Raúl Oliveira

# 103982 Rumbeando

Gracias. Si. La hora me permite que los archivos no se sobrescriban.

Ahora bien: Cómo ordeno que se reinicie el script después que watch detecta que no funciona?.

Disculpame. Es como pedirte que lo hagas vos, pero....

Raúl (arrobarrob)

Lo explico difícil, no sea que lo entiendan.



Gravatar de Raúl Oliveira

# 104323 No puedo con watch

El script que tengo es el que sigue, con "date +%d-%m_"%H:%M"`.mp3" logro que no se sobre escriban; hasta ahí perfecto y claro. El problema es que no logro reiniciarlo o iniciar uno nuevo cuando el primero se detiene por falta de señal porque el script no se cierra, simplemente se queda clavado.  Digamos que pretendo grabar un programa a las 5:00 am para escucharlo después de levantarme. No pude con while ni con watch.

#!/bin/bash

emisora=mms://delplata.telecomdatacenter.com.ar/delplata
minutos=190
programa=delplata
dir=/home/haydita
nombre=${dir}/${programa}_`date +%d-%m_"%H:%M"`.mp3
[ -e /tmp/radio_pipe ] && rm /tmp/radio_pipe
mkfifo /tmp/radio_pipe
lame /tmp/radio_pipe $nombre 2>/dev/null 1>/dev/null &
mplayer $emisora -cache 32 -ao pcm:file=/tmp/radio_pipe 2>/dev/null </dev/null &
sleep $(($minutos * 60))
    kill %2
    rm /tmp/radio_pipe

Raúl (arrobarrob)

Lo explico difícil, no sea que lo entiendan.



Gravatar de drakedalfa

# 104324 Prueba asi

Digamos que tu script que graba el stream se llama captura.sh:

until captura.sh; do
echo "Captura.sh termino su ejecucion con codigo: $?.  reiniciando..." >&2
sleep 1
done

Captura.sh debe estar en el path de este script o puedes poner el path absoluto.



Gravatar de Raúl Oliveira

# 104444 Perdón por la torpeza.

No hay caso. No puedo.
Digamos que ejecuto "Liliana.sh" para que me grabe la audición de Foressi desde las 6 am con otro script llamado grabardelplata.sh. Ambos están en un directorio con path absoluto.
En primer término está el script con until, en segundo término está lo que sucede si no hay señal a la hora de inicio, y, por último está lo que sucede cuando comienza a grabar y luego se corta la señal.
Significa que no puedo revisar o reinicial cada 21" como pretendo.
Dónde fallo?.

#!/bin/bash
until /home/haydita/AyD/Extras/Script/grabardelplata.sh; do
echo "Liliana.sh terminó su ejecucion con codigo: $?.  reiniciando..." >&2
sleep 21
done

[haydita@localhost ~]$ sh Liliana.sh
MPlayer SVN-1.rc4.0.r31086.3plf2010.0-4.4.1 (C) 2000-2010 MPlayer Team
Playing mms://delplata.telecomdatacenter.com.ar/delplata.
STREAM_ASF, URL: mms://delplata.telecomdatacenter.com.ar/delplata
Resolving delplata.telecomdatacenter.com.ar for AF_INET...
Resolving delplata.telecomdatacenter.com.ar for AF_INET...
Connecting to server delplata.telecomdatacenter.com.ar[200.82.126.70]: 80...
Cache size set to 32 KBytes
Cache fill:  0.40% (132 bytes)
Exiting... (End of file)

[haydita@localhost ~]$ sh Liliana.sh
MPlayer SVN-1.rc4.0.r31086.3plf2010.0-4.4.1 (C) 2000-2010 MPlayer Team
Playing mms://delplata.telecomdatacenter.com.ar/delplata.
STREAM_ASF, URL: mms://delplata.telecomdatacenter.com.ar/delplata
Resolving delplata.telecomdatacenter.com.ar for AF_INET...
Connecting to server delplata.telecomdatacenter.com.ar[200.82.126.70]: 1755...
Resolving delplata.telecomdatacenter.com.ar for AF_INET...
Connecting to server delplata.telecomdatacenter.com.ar[200.82.126.70]: 80...
Resolving delplata.telecomdatacenter.com.ar for AF_INET...
Connecting to server delplata.telecomdatacenter.com.ar[200.82.126.70]: 80...
Cache size set to 32 KBytes
Cache fill:  0.00% (0 bytes)
ASF file format detected.
[asfheader] Audio stream found, -aid 1
==========================================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
AUDIO: 16000 Hz, 2 ch, s16le, 16.0 kbit/3.12% (ratio: 2000->64000)
Selected audio codec: [ffwmav2] afm: ffmpeg (DivX audio v2 (FFmpeg))
==========================================================================
[AO PCM] File: /tmp/radio_pipe (WAVE)
PCM: Samplerate: 16000Hz Channels: Stereo Format s16le
[AO PCM] Info: Faster dumping is achieved with -vc null -vo null -ao pcm:fast
[AO PCM] Info: To write WAVE files use -ao pcm:waveheader (default).
AO: [pcm] 16000Hz 2ch s16le (2 bytes per sample)
Video: no video
Starting playback...
A:1190327.0 (330:38:47.0) of 1844674428928.0 (512409563:35:28.0) 124.9% 0%
Exiting... (End of file)

Raúl (arrobarrob)

Lo explico difícil, no sea que lo entiendan.



Gravatar de drakedalfa

# 104454 Humm

No entendí tu pregunta.



Gravatar de Raúl Oliveira

# 104476 En otros términos

Tengo un script para grabar una audición estando yo ausente. Funciona muy bien:

#!/bin/bash
emisora=mms://delplata.telecomdatacenter.com.ar/delplata
minutos=190
programa=delplata
dir=/home/haydita
nombre=${dir}/${programa}_`date +%d-%m_"%H:%M"`.mp3
[ -e /tmp/radio_pipe ] && rm /tmp/radio_pipe
mkfifo /tmp/radio_pipe
lame /tmp/radio_pipe $nombre 2>/dev/null 1>/dev/null &
mplayer $emisora -cache 32 -ao pcm:file=/tmp/radio_pipe 2>/dev/null </dev/null &
sleep $(($minutos * 60))
    kill %2
    rm /tmp/radio_pipe

Resulta que si se corta la señal o la emisión, me quedo sin la grabación. Entonces intenté un segundo script para controlar el funcionamiento del original y reiniciarlo en caso de corte.Probé con watch y otras alternativas y no lo logré. ahora tampoco. El hecho de que el nombre de la grabación tiene adicionada la hora impide sobre escribirlo.

La idea es reiniciar la grabación automáticamente.

Espero que se entienda. No tengo problema de explicarlo de otros modos.

Gracias por atender.

Raúl (arrobarrob)

Lo explico difícil, no sea que lo entiendan.



Gravatar de katnatek

# 102942 Pues dependerá de lo que haga

Pues dependerá de lo que haga el script.

Lo que te puedo decir es que hay que validar los códigos de salida de la operación que te interese ( $? ) y si no es exitosa (normalmente $? = 0) hacer que se ejecute de nuevo la operación.

Hay que tener cuida, por ejemplo si diriges la salida de un comando a un archivo en ves de usar > usa >>

Más consejos dependen del código del script

Opciones de visualización de comentarios

Seleccione la forma que desee de mostrar los comentarios y haga clic en «Guardar opciones» para activar los cambios.