una tarea segundos rango programar minutos minuto manualmente instalar horas ejecutar cada ubuntu cron scheduled-tasks crontab

tarea - instalar crontab ubuntu



Ejecutando un cron cada 30 segundos (15)

Acabo de tener una tarea similar que hacer y usar el siguiente enfoque:

nohup watch -n30 "kill -3 NODE_PID" &

Necesitaba tener una eliminación periódica de -3 (para obtener el seguimiento de pila de un programa) cada 30 segundos durante varias horas.

nohup ... &

Esto es para asegurarse de que no pierdo la ejecución del reloj si pierdo el shell (problema de red, bloqueo de ventanas, etc.)

Ok, así que tengo un cron que necesito ejecutar cada 30 segundos ... aquí está lo que tengo a continuación

*/30 * * * * /bin/bash -l -c ''cd /srv/last_song/releases/20120308133159 && script/rails runner -e production ''/'''Song.insert_latest''/'''''

Funciona, pero dura 30 minutos o 30 segundos ... y también he estado leyendo que cron podría no ser la mejor herramienta para usar si lo ejecuto con tanta frecuencia. ¿Hay alguna otra herramienta mejor que pueda instalar en ubuntu 11.04 que sea una mejor opción o hay una manera de arreglar el cron anterior?


Actualmente estoy usando el siguiente método. Funciona sin problemas.

* * * * * /bin/bash -c '' for i in {1..X}; do YOUR_COMMANDS ; sleep Y ; done ''

Si desea ejecutar cada N segundos, X será 60 / N e Y será N.

Gracias.


Ejecutar en un bucle de shell, ejemplo:

#!/bin/sh counter=1 while true ; do echo $counter counter=$((counter+1)) if [[ "$counter" -eq 60 ]]; then counter=0 fi wget -q http://localhost/tool/heartbeat/ -O - > /dev/null 2>&1 & sleep 1 done


El trabajo cron no se puede usar para programar un trabajo en intervalos de segundos. es decir, no puede programar una tarea cron para que se ejecute cada 5 segundos. La alternativa es escribir un script de shell que use sleep 5 comando sleep 5 en él.

Cree un script de shell cada 5 segundos después de bash while loop como se muestra a continuación.

$ cat every-5-seconds.sh #!/bin/bash while true do /home/ramesh/backup.sh sleep 5 done

Ahora, ejecute este script de shell en segundo plano utilizando nohup como se muestra a continuación. Esto seguirá ejecutando el script incluso después de que cierre sesión en su sesión. Esto ejecutará su script de shell backup.sh cada 5 segundos.

$ nohup ./every-5-seconds.sh &


El trabajo de Crontab se puede usar para programar un trabajo en minutos / horas / días, pero no en segundos. La alternativa :

Crea un script para ejecutar cada 30 segundos:

#!/bin/bash # 30sec.sh for COUNT in `seq 29` ; do cp /application/tmp/* /home/test sleep 30 done

Use crontab -e y un crontab para ejecutar este script:

* * * * * /home/test/30sec.sh > /dev/null


Gracias por todas las buenas respuestas. Para hacerlo simple, me gustó la solución mixta, con el control sobre crontab y la división de tiempo en el script. Así que esto es lo que hice para ejecutar un script cada 20 segundos (tres veces por minuto). Línea crontab:

* * * * 1-6 ./a/b/checkAgendaScript >> /home/a/b/cronlogs/checkAgenda.log

Guión:

cd /home/a/b/checkAgenda java -jar checkAgenda.jar sleep 20 java -jar checkAgenda.jar sleep 20 java -jar checkAgenda.jar


La granularidad de Cron está en minutos y no fue diseñada para despertarse cada x segundos para ejecutar algo. Ejecute su tarea repetitiva dentro de un bucle y debería hacer lo que necesita:

#!/bin/env bash while [ true ]; do sleep 30 # do what you need to here done


No necesita dos entradas cron, puede ponerlo en uno con:

* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"

así que en tu caso:

* * * * * /bin/bash -l -c "cd /srv/last_song/releases/20120308133159 && script/rails runner -e production ''/'''Song.insert_latest''/''' ; sleep 30 ; cd /srv/last_song/releases/20120308133159 && script/rails runner -e production ''/'''Song.insert_latest''/'''"


Puedes ver mi respuesta a esta pregunta similar

Básicamente, he incluido un script de bash llamado "runEvery.sh" que puede ejecutar con cron cada 1 minuto y pasar como argumentos el comando real que desea ejecutar y la frecuencia en segundos en que desea ejecutarlo.

algo como esto

* * * * * ~/bin/runEvery.sh 5 myScript.sh


Tiene */30 en el especificador de minutos , lo que significa cada minuto pero con un paso de 30 (en otras palabras, cada media hora). Dado que cron no baja a las resoluciones de subminutos, tendrá que encontrar otra forma.

Una posibilidad, aunque es un poco complicado, es tener dos trabajos, uno compensado por 30 segundos:

* * * * * /path/to/executable param1 param2 * * * * * ( sleep 30 ; /path/to/executable param1 param2 )

Los dos trabajos cron se ejecutan cada minuto, pero el último esperará medio minuto antes de ejecutar la "fuente" del trabajo, /path/to/executable .


Usar reloj

$ watch --interval .30 script_to_run_every_30_sec.sh


Use fcron ( http://fcron.free.fr/ ) - le da granularidad en segundos y mucho mejor y más rico en funciones que cron (vixie-cron) y estable también. Solía ​​hacer cosas estúpidas como tener alrededor de 60 scripts php ejecutándose en una máquina en configuraciones muy estúpidas, ¡y aún así hizo su trabajo!


Usted no puede Cron tiene una granularidad de 60 seg.

* * * * * cd /srv/last_song/releases/20120308133159 && script/rails runner -e production ''/'''Song.insert_latest''/''' * * * * * sleep 30 && cd /srv/last_song/releases/20120308133159 && script/rails runner -e production ''/'''Song.insert_latest''/'''


en dir /etc/cron.d/

nuevo crea un archivo excute_per_30s

* * * * * yourusername /bin/date >> /home/yourusername/temp/date.txt * * * * * yourusername sleep 30; /bin/date >> /home/yourusername/temp/date.txt

ejecutará cron cada 30 segundos


escribir un script de shell crear un archivo .sh

nano every30second.sh

y escribir guion

#!/bin/bash For (( i=1; i <= 2; i++ )) do write Command here sleep 30 done

a continuación, establezca cron para este script crontab -e

(* * * * * /home/username/every30second.sh)

este archivo de llamada cron .sh en cada minuto y en el comando del archivo .sh se ejecuta 2 veces en 1 minuto

si desea ejecutar el script durante 5 segundos, reemplace 30 por 5 y cambie por un bucle como este: For (( i=1; i <= 12; i++ ))

cuando selecciona para cualquier segundo, luego calcule 60 / su segundo y escriba en For loop