¿Cómo puedo programar un trabajo cron que se ejecuta cada 10 segundos en Linux?

14

Sé cómo hacerlo cada minuto, pero ¿qué tal cada 10 segundos?

Alex
fuente

Respuestas:

10

No puede programar el trabajo cada diez segundos, pero supongo que podría programar el trabajo para que se ejecute cada minuto y dormir en un ciclo en intervalos de 10 segundos. Esto se basaría en que su comando se complete antes de que expire el intervalo de diez segundos, o se superpondrá cuando se ejecute el siguiente comando. Esto parece una solución precaria, pero si puede garantizar una ejecución muy corta del comando principal del script, funcionaría.

#!/bin/bash
i=0

while [ $i -lt 6 ]; do
  /run/your/command &
  sleep 10
  i=$(( i + 1 ))
done
Miguel
fuente
Hago algo similar ... solo uso * 's en crontab, y luego mi script usa flock y bucles para siempre, nunca se cierra a menos que no pueda obtener un bloqueo.
Peter
22

Tuve una tarea similar la semana pasada. Mi solución fue multiplicar las entradas cron estándar a la frecuencia deseada. Mi crontab se ve así:

* * * * * /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 10; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 20; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 30; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 40; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 50; /usr/local/bin/php /var/www/myscript.php

Si desea verificar los resultados de myscript.php, por ejemplo, para depurar, simplemente agregue

&> /tmp/myscipt.log

a cada línea en el crontab de arriba. Luego, stderr y stdout se redirigen al archivo de registro.

Vemos
fuente
2
+1 para uso creativo de cron
shodanshok
2
Esta es la mejor solución en mi humilde opinión. Está claro lo que está haciendo y no requiere un script o una solución de terceros.
Jeremy
0

Cron solo permite un mínimo de un minuto. Puedes probar esto:

* * * * * ( sleep 10 ; /usr/bin/wget http://api.us/application/)
Thoman
fuente
0

Si desea pasar menos de 10 segundos, por ejemplo, 5 segundos, le recomiendo hacer un bucle de trabajo con un pequeño script como ese:

#!/bin/bash

INTERVAL=5
while true; do

  echo "do something"

  # wait for next interval
  WAIT_UNTIL=$(($(date +%s) + $INTERVAL))
  while [ $(date +%s) -lt $WAIT_UNTIL ]; do
    sleep 1
  done

done

Si necesita ir por debajo del segundo, agregue microsegundos al comando de fecha.

Vemos
fuente
0
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run

Aquí el script se puede ejecutar con el intervalo de 10 segundos ...

Sukhjinder Singh
fuente
Esta solución ya se publicó hace 5 años. Deberías votarlo en lugar de publicarlo nuevamente.
Gerald Schneider