He visto algunas soluciones, que incluyen mirar y simplemente ejecutar un script en bucle (y dormir) en segundo plano, pero nada ha sido ideal.
Tengo una secuencia de comandos que debe ejecutarse cada 15 segundos y, dado que cron no admite segundos, me queda resolver otra cosa.
¿Cuál es la forma más sólida y eficiente de ejecutar un script cada 15 segundos en Unix? La secuencia de comandos también debe ejecutarse después de reiniciar.
Respuestas:
Usaría cron para ejecutar un script cada minuto, y haría que ese script ejecute su script cuatro veces con un reposo de 15 segundos entre ejecuciones.
(Eso supone que su script se ejecuta rápidamente; de lo contrario, podría ajustar los tiempos de suspensión).
De esa manera, obtendrá todos los beneficios
cron
y también su período de ejecución de 15 segundos.Editar: Vea también el comentario de @ bmb a continuación.
fuente
Si insiste en ejecutar su script desde cron:
y reemplace el nombre y la ruta de su script a / foo / bar / your_script
fuente
* * * * * sleep 15; php /foo/bar/your_script
#!/usr/bin/php
a la parte superior de su script php y hacerlo ejecutableVersión modificada de lo anterior:
agregar a / etc / crontab:
fuente
¿No funcionará ejecutar esto en segundo plano?
Esto es tan eficiente como parece. La parte importante solo se ejecuta cada 15 segundos y el script duerme el resto del tiempo (por lo tanto, no desperdicia ciclos).
fuente
&
al final de la línea 3. En cualquier caso, tal como está, esto no se ejecuta cada 15 segundos. Esto se ejecuta cada "15 segundos + sinecho hello
importar el tiempo que tarde en ejecutarse". Lo que podría ser de 0,01 segundos; podrían ser 19 horas.Escribí un planificador más rápido que cron. También he implementado una guardia superpuesta. Puede configurar el programador para que no inicie un nuevo proceso si el anterior aún se está ejecutando. Eche un vistazo a https://github.com/sioux1977/scheduler/wiki
fuente
Utilice nano sueño (2) . Utiliza una estructura
timespec
que se utiliza para especificar intervalos de tiempo con precisión de nanosegundos.fuente
fuente
Desde mi respuesta anterior, se me ocurrió otra solución que es diferente y quizás mejor. Este código permite que los procesos se ejecuten más de 60 veces por minuto con una precisión de microsegundos. Necesita el programa usleep para que esto funcione. Debería ser bueno hasta 50 veces por segundo.
fuente
Para evitar una posible superposición de ejecución, utilice un mecanismo de bloqueo como se describe en ese hilo .
fuente