¿Cómo evito que el sueño se confunda?

0

Ejecuto dos scripts. Ambos son esencialmente el mismo código, pero deben ejecutarse con 5 minutos de diferencia para evitar colisiones. Primer script: #! / Bin / sh

# First run
line="Bonus check"
        stamp=$(date +%Y%m%d-%H%M)
      # sleep 90s
        echo "$stamp\t $line" >> /home/rdanner3/Desktop/CardParty.log
        {
export DISPLAY=:0.0
google-chrome [URL masked]
        }
sleep 45s
# google-chrome
pkill -f chrome

# Second run to seventh run identical to above; stripped for brevity.

Segundo script (observe que es esencialmente el mismo código; ¡ambos realmente necesitan ser bucles para la cordura!)

#!/bin/sh

# 1st run
line="Bonus checked."
stamp=$(date +%Y%m%d-%H%M)
# sleep 90s
echo "$stamp\t $line" >> /home/rdanner3/Desktop/Slots.log
{
export DISPLAY=:0.0
google-chrome [URL masked]
}
sleep 45s
# google-chrome
pkill -f chrome

# 2nd run to 7th run identical to above code...stripped for brevity

¿Qué sucede cuando los scripts alcanzan la segunda ejecución? Se ejecutan en cuestión de segundos, a pesar de que los trabajos cron que inicialmente los inician están separados por 5 minutos. Es bastante obvio (a partir de los archivos de registro que escriben las dos secuencias de comandos) que se están iniciando con una diferencia de segundos, no en el orden correcto. ¿Cambiar el segundo guión a (digamos) ash o bash sería útil para evitar que los comandos de suspensión de los dos guiones se confundan entre sí? ¿O estoy cometiendo algún otro error (por ejemplo, necesito descomentar la segunda ejecución de google-chrome para permitir que el pkill despeje el aire)

Noté el problema ayer, decidí que necesitaba un poco de ayuda. Entonces vine aquí por eso.

Raymond Danner
fuente

Respuestas:

2

El error probablemente se basa en dormir para el tiempo absoluto en lugar del tiempo relativo. Las cosas antes del sueño pueden estar tomando una cantidad variable de tiempo.

Después de eliminar las repeticiones de código, tal vez lo usaría aten un bucle o, más probablemente, usaría un uso más sofisticado cron.

Si las horas de inicio exactas no fueran importantes, llamaría a dos funciones secuencialmente en un bucle simple. Combinando ambos guiones.

RedGrittyBrick
fuente
Parte del problema es que cron simplemente no puede hacer un intervalo de 183 minutos. El intervalo es relativamente importante para el funcionamiento de una línea que hace el trabajo pesado, y por alguna extraña razón, Windows no tiene ningún problema para hacer este tipo de intervalo. He intentado un esquema de tiempo basado en la época, pero simplemente no funcionó. De manera simple, con la segunda invocación del navegador sin comentarios, los dos scripts funcionan esencialmente sin fallas. Todavía me rasco la cabeza sobre eso, ya que la segunda ejecución del navegador es un error feo.
Raymond Danner
En una nota de limpieza (en referencia al código del script), ¿qué tipo de bucle recomendaría? Admito que soy bastante nuevo en la creación de scripts para Linux, aunque he hecho bucles en los scripts para DOS (todo el camino hasta el ProDOS de Apple, créanlo o no ... seguido de PC-DOS y MS- DOS) y Windows.
Raymond Danner
@Raymond. No estoy seguro de poder recomendar un código específico, pero si tiene una lectura rápida de un recurso, como la introducción del bucle bash , debería poder encontrar una construcción que satisfaga sus necesidades. Tal vez algo comofor url in "http://a.com" "http://b.com"; do google-chrome $url; sleep 45s; done
RedGrittyBrick