198 votes

L'exécution d'un cron toutes les 30 secondes

Ok, donc j'ai un cron que j'ai besoin d'exécuter toutes les 30 secondes...voici ce que j'ai ci-dessous

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

Il fonctionne, mais est-ce de 30 minutes ou 30 secondes...et aussi j'ai lu que cron peut-être pas le meilleur outil à utiliser si je le lance souvent. Un meilleur outil que je peux installer sur ubuntu 11.04 qui sera une meilleure option ou est-il un moyen de corriger le au-dessus de cron

525voto

paxdiablo Points 341644

Vous avez */30 dans les minutes spécificateur - cela signifie que chaque minute, mais avec un pas de 30 (en d'autres termes, toutes les demi-heures). Depuis cron il n'est pas à sous-minute résolutions, vous aurez besoin de trouver un autre moyen.

Une possibilité, même si c'est un peu une bidouille, c'est d'avoir deux emplois, l'un décalage de 30 secondes:

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

Les deux cron jobs fait exécuter à chaque minute, mais ce dernier va attendre une demi-minute avant l'exécution de la "viande" de l'emploi, /path/to/executable.

51voto

wildplasser Points 17900

Vous ne pouvez pas. Cron est un 60 sec de granularité.

* * * * * 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'\''

36voto

Marvin Pinto Points 8292

Cron granularité est en minutes et n'a pas été conçu pour réveiller chaque x secondes pour exécuter quelque chose. Exécutez votre répétition des tâches au sein d'une boucle et il doit faire ce dont vous avez besoin:

while [ true ]; do
 sleep 30
 # do what you need to here
Done

10voto

shlomia Points 151

Vous pouvez consulter ma réponse à cette question similaire

En gros, j'ai inclus un script bash nommé "runEvery.sh" que vous pouvez exécuter avec cron toutes les 1 minutes et passer comme arguments le réel de la commande que vous souhaitez exécuter, et de la fréquence en quelques secondes dans lequel vous souhaitez exécuter.

quelque chose comme ceci

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

8voto

Pankaj Shinde Points 124

Cron job ne peut pas être utilisé pour planifier un travail en quelques secondes d'intervalle. j'.e Vous ne pouvez pas planifier une tâche cron pour exécuter toutes les 5 secondes. L'alternative est d'écrire un script shell qui utilise sleep 5 commande.

Créer un script shell every-5-seconds.sh à l'aide de bash en boucle, comme illustré ci-dessous.

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

Maintenant, exécutez ce script shell dans le fond à l'aide de nohup comme indiqué ci-dessous. Cela permet de garder l'exécution du script, même après que vous vous déconnecter de votre session. Cela permettra de exécuter votre backup.sh shell script toutes les 5 secondes.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: