Exécution d'un cron toutes les 30 secondes

Ok donc j'ai un cron que je dois 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 30 minutes ou 30 secondes...et aussi j'ai lu que cron pourrait ne pas être le meilleur outil à utiliser si je l'exécute aussi 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 ci-dessus cron

198
demandé sur Matt Elhotiby 2012-03-08 18:40:33

14 réponses

Vous avez */30 dans le spécificateur minutes - cela signifie chaque minute mais avec un pas de 30 (en d'autres termes, toutes les demi-heures). Puisque cron ne descend pas aux résolutions de sous-minute, vous devrez trouver un autre moyen.

Une possibilité, bien que ce soit un peu un kludge, est d'avoir deux emplois, un décalage de 30 secondes:

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

Les deux travauxcron s'exécutent toutes les minutes mais ce dernier attendra une demi-minute avant d'exécuter la "viande" du travail, /path/to/executable.

525
répondu paxdiablo 2013-06-22 02:16:54

Vous ne pouvez pas. Cron a une granularité de 60 secondes.

* * * * * 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'\''
51
répondu wildplasser 2012-03-08 14:46:36

La granularité de Cron est en minutes et n'était pas conçu pour se réveiller toutes les x secondes pour exécuter quelque chose. Exécutez votre tâche répétitive dans une boucle et il devrait faire ce dont vous avez besoin:

#!/bin/env bash
while [ true ]; do
 sleep 30
 # do what you need to here
done
36
répondu Marvin Pinto 2015-01-16 17:09:55

Pas besoin de deux entrées cron, vous pouvez le mettre en un avec:

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

Donc dans votre cas:

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

21
répondu Andrew 2015-04-23 05:23:18

, Vous pouvez consulter ma réponse à cette question semblable

Fondamentalement, j'y ai inclus un script bash nommé "runEvery.sh" que vous pouvez exécuter avec cron toutes les 1 minute et passer comme arguments la commande réelle que vous souhaitez exécuter et la fréquence en secondes dans laquelle vous voulez l'exécuter.

Quelque chose comme ça

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

10
répondu shlomia 2017-05-23 11:33:26

Le travail Cron ne peut pas être utilisé pour planifier un travail en secondes d'intervalle. c'est-à-dire que vous ne pouvez pas planifier une tâche cron à 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 en utilisant bash while boucle comme indiqué 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 en arrière-plan en utilisant nohup comme indiqué ci-dessous. Cela continuera à exécuter le script même après la déconnexion de votre session. Cela exécutera votre backup.sh script shell toutes les 5 secondes.

$ nohup ./every-5-seconds.sh &
8
répondu Pankaj Shinde 2014-10-15 06:33:51

Utiliser montre:

$ watch --interval .30 script_to_run_every_30_sec.sh
6
répondu user7079817 2016-10-27 10:56:29

Dir /etc/cron.d/

Nouveau créer un fichier excute_per_30s

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

Exécutera cron toutes les 30 secondes

6
répondu LingYFH 2018-05-08 01:56:47

Utiliser fcron ( http://fcron.free.fr/) - Vous donne granularité en quelques secondes et beaucoup mieux et plus riche en fonctionnalités que cron (vixie-cron) et stable aussi. J'avais l'habitude de faire des choses stupides comme avoir environ 60 scripts php en cours d'exécution sur une machine dans des paramètres très stupides et il a toujours fait son travail!

4
répondu Adi Chiru 2015-03-06 23:24:48

Le travail Crontab peut être utilisé pour planifier un travail en minutes/heures/jours, mais pas en secondes. L'alternative:

Créez un script à exécuter toutes les 30 secondes:

#!/bin/bash
# 30sec.sh

for COUNT in `seq 29` ; do
  cp /application/tmp/* /home/test
  sleep 30
done

Utilisez crontab -e et une crontab pour exécuter ce script:

* * * * * /home/test/30sec.sh > /dev/null
4
répondu szaier 2017-01-26 12:01:12

Merci pour toutes les bonnes réponses. Pour simplifier, j'ai aimé la solution mixte, avec le contrôle sur crontab et la division du temps sur le script. C'est donc ce que j'ai fait pour exécuter un script toutes les 20 secondes (trois fois par minute). Ligne Crontab:

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

Script:

cd /home/a/b/checkAgenda

java -jar checkAgenda.jar
sleep 20
java -jar checkAgenda.jar 
sleep 20
java -jar checkAgenda.jar 
1
répondu jfajunior 2018-03-06 09:21:26

J'ai juste eu une tâche similaire à faire et à utiliser l'approche suivante :

nohup watch -n30 "kill -3 NODE_PID" &

J'avais besoin d'avoir un kill -3 périodique (pour obtenir la trace de pile d'un programme) toutes les 30 secondes pendant plusieurs heures.

nohup ... & 

C'est ici pour être sûr que je ne perds pas l'exécution de watch si je perds le shell (problème de réseau, crash de windows, etc...)

0
répondu Thomas 2018-02-21 12:13:20

Écrire un script shell créer un fichier. sh

Nano every30second.sh

Et écrire un script

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

Ensuite, définissez cron pour ce script crontab -e

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

Ce fichier cron call. sh toutes les 1 min et dans la commande. sh file est exécuté 2 fois en 1 min

Si vous voulez exécuter le script pendant 5 secondes, remplacez 30 par 5 et changez pour la boucle comme ceci: For (( i=1; i <= 12; i++ ))

Lorsque vous sélectionnez pour une seconde, calculez 60 / votre seconde et écrivez pour boucle

0
répondu Aditya Gosavi 2018-08-02 16:40:25

Exécuter dans une boucle shell, exemple:

#!/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
-1
répondu Lo Vega 2018-07-13 01:34:05