Comment puis-je planifier un travail cron qui s'exécute toutes les 10 secondes sous Linux?

14

Je sais comment faire chaque minute, mais qu'en est-il toutes les 10 secondes?

Alex
la source

Réponses:

10

Vous ne pouvez pas planifier le travail toutes les dix secondes, mais je suppose que vous pouvez planifier le travail pour qu'il s'exécute toutes les minutes et dormir en boucle à des intervalles de 10 secondes. Cela dépendrait de l'exécution de votre commande avant l'expiration de l'intervalle de dix secondes, ou vous obtiendrez un chevauchement lors de l'exécution de la prochaine commande. Cela semble être une solution précaire, mais si vous pouvez garantir une exécution très courte de la commande principale du script, cela fonctionnerait.

#!/bin/bash
i=0

while [ $i -lt 6 ]; do
  /run/your/command &
  sleep 10
  i=$(( i + 1 ))
done
Michael
la source
Je fais une chose similaire ... J'utilise simplement * dans crontab, puis mon script utilise flock et boucles pour toujours, ne se ferme jamais à moins qu'il ne puisse pas obtenir de verrou.
Peter
22

J'ai eu une tâche similaire la semaine dernière. Ma solution était de multiplier les entrées cron standard à la fréquence souhaitée. Mon crontab ressemble à:

* * * * * /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 10; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 20; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 30; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 40; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 50; /usr/local/bin/php /var/www/myscript.php

Si vous voulez vérifier les résultats de myscript.php, par exemple pour le débogage, ajoutez simplement

&> /tmp/myscipt.log

à chaque ligne de la crontab ci-dessus. Ensuite, stderr et stdout sont redirigés vers le fichier journal.

Nous voyons
la source
2
+1 pour une utilisation créative de cron
shodanshok
2
Ceci est la meilleure solution à mon humble avis. Il est clair ce qu'il fait et ne nécessite pas de script ou de solution tierce.
Jeremy
0

Cron ne permet qu'un minimum d'une minute. Vous pouvez essayer ceci -

* * * * * ( sleep 10 ; /usr/bin/wget http://api.us/application/)
Thoman
la source
0

Si vous voulez passer sous 10 secondes, par exemple 5 secondes, je recommande de faire une boucle de travail avec un petit script comme ça:

#!/bin/bash

INTERVAL=5
while true; do

  echo "do something"

  # wait for next interval
  WAIT_UNTIL=$(($(date +%s) + $INTERVAL))
  while [ $(date +%s) -lt $WAIT_UNTIL ]; do
    sleep 1
  done

done

Si vous devez dépasser la seconde, ajoutez des microsecondes à la commande date.

Nous voyons
la source
0
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run

Ici, le script peut être exécuté avec l'intervalle de 10 secondes ...

Sukhjinder Singh
la source
Cette solution a déjà été publiée il y a 5 ans. Vous devriez simplement le voter au lieu de le publier à nouveau.
Gerald Schneider