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