Tengo un script que debe ejecutarse cada cinco segundos. Sé que cron
puede hacer tareas por minuto, pero ¿hay alguna manera de ejecutar algo cada segundo?
sleep 5
pausa (quizás dentro de un bucle) durante 5 segundos) ...?
Tengo un script que debe ejecutarse cada cinco segundos. Sé que cron
puede hacer tareas por minuto, pero ¿hay alguna manera de ejecutar algo cada segundo?
sleep 5
pausa (quizás dentro de un bucle) durante 5 segundos) ...?
Respuestas:
Cron solo permite un mínimo de un minuto. Lo que podría hacer es escribir un script de shell con un bucle infinito que ejecute su tarea, y luego duerme durante 5 segundos. De esa manera, su tarea se ejecutará más o menos cada 5 segundos, dependiendo de cuánto tiempo tome la tarea.
#!/bin/bash
while true; do
# Do something
sleep 5;
done
Puede crear un my-task.sh
archivo con el contenido anterior y ejecutarlo con sh my-task.sh
. Opcionalmente, puede configurarlo supervisor
como un servicio para que se inicie cuando se inicie el sistema, etc.
Realmente parece que estás haciendo algo que probablemente no deberías estar haciendo. Esto se siente mal .
Podría hacer que un cron
trabajo inicie un script cada minuto que inicie 12 procesos en segundo plano, por lo tanto:
* * * * * ~/dostuff.sh
dostuff.sh
:
(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
Sin embargo, mi pregunta es: ¿Qué podría hacer en la TIERRA que necesita ejecutarse cada 5 segundos?
/media
directorio de una unidad que
What on EARTH
- estadísticas, recolección de basura, sincronización de archivos, estado en línea, lo que sea.
Solo usa un bucle:
while true ; do ./your-script & sleep 5; done
Esto iniciará su script como un trabajo en segundo plano, dormirá durante 5 segundos y luego volverá a recorrerlo. Puede usar Ctrl-C para abortarlo, o usar cualquier otra condición en lugar de true
, por ejemplo, ! test -f /tmp/stop-my-script
para hacer un bucle mientras el archivo /tmp/stop-my-script
no exista.
bash: syntax error near unexpected token ';'
, entonces lo saqué. Tengo bash 4.3.11. Mi comando se ejecuta rápidamente, así que está bien si se ejecuta en primer plano.
./your-script
ejecutar en segundo plano (durante el sueño de 5 segundos), puede mantener &
pero soltar el ;
. Como &
sirve para separar los comandos, es innecesario (y aparentemente no está permitido) tenerlo ;
después en la misma línea. Otra forma es escribir el bucle en varias líneas (con un salto de línea después &
y, opcionalmente, saltos de línea después do
y antes done
también). Como el ;
after &
parece ser un error tipográfico, lo eliminé. blueyed: no dude en poner la parte de ;
atrás si realmente lo desea; Si es así, sugiero también agregar una explicación.
Podrías usar el paquete GNU mcron , una alternativa de "Vixie cron".
http://www.gnu.org/software/mcron/manual/mcron.html#Top
"Puede permitir fácilmente que se especifiquen puntos de tiempo más finos, es decir, segundos. En principio, esto podría extenderse a microsegundos, pero esto no se implementa".
mcron
requiere sendmail
ser instalado y activado por defecto. ¿Cómo deshabilitarlo?
La configuración mínima en cron es de minutos, no puede configurarla durante 5 segundos. Podrías usar Quartz que permite segundos. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
Use cactus para monitorear el enrutador y el conmutador, pero Cron solo permite un mínimo de un minuto, por lo que si un puerto / dispositivo está inactivo, no hay advertencia hasta dos minutos después.
Puede usar una unidad de temporizador SystemD, que activará un servicio, que configuraría para hacer lo que quiera, cada 5 segundos.
Supongamos que se llama a su unidad de servicio mystuff.service
y se instala en ella /etc/systemd/system
(consulte los servicios de usuario de SystemD si desea reemplazar el crontab de un usuario), luego puede escribir una unidad de temporizador para ejecutar el servicio en el momento del arranque y luego cada 5 segundos, de esta manera:
/etc/systemd/system/mystuff.timer
[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target
Luego, vuelva a cargar la configuración del sistema, active la unidad del temporizador e iníciela.
He hecho este tipo de cosas con mucho éxito (y el resultado final aumenta semanas a la vez, hasta que se reinicia la máquina). En cuanto a lo que estaba haciendo en este momento, actualizar la información y ponerla en caché, actualizándola cada 10 segundos.
#!/bin/sh
SLEEP=5
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# echo and restart...
exec $0
El 'exec $ 0' reinicia el script, pero reemplaza el script en ejecución. Inicialmente se puede iniciar con una línea crontab '@reboot'.
while
bucle en lugar de reiniciar repetidamente el script?