84 votes

Comment obtenir un script unix d'exécuter toutes les 15 secondes?

J'ai vu quelques solutions, y compris les regarder et simplement l'exécution d'une boucle (et dormir) script en tâche de fond, mais rien n'a été idéal.

J'ai un script qui doit exécuter toutes les 15 secondes, et depuis cron ne prend pas en charge secondes, je reste à trouver quelque chose d'autre.

Quel est le plus robuste et efficace pour exécuter un script toutes les 15 secondes sur unix? Le script doit également exécuter après un redémarrage.

295voto

rasjani Points 2835

Si vous insistez, de l'exécution de votre script à partir de cron:

* * * * * /foo/bar/your_script
* * * * * sleep 15; /foo/bar/your_script
* * * * * sleep 30; /foo/bar/your_script
* * * * * sleep 45; /foo/bar/your_script

et de remplacer votre nom de script&chemin /foo/bar/your_script

77voto

RichieHindle Points 98544

Je voudrais utiliser cron pour exécuter un script toutes les minutes, et faire que le script s'exécuter votre script à quatre reprises avec 15 secondes de sommeil entre les courses.

(Qui suppose que votre script est rapide d'exécution, vous pouvez ajuster le temps de sommeil si pas.)

De cette façon, vous obtenez tous les avantages d' cron ainsi que votre 15 de la deuxième période.

Edit: Voir aussi @bmb de commentaire ci-dessous.

15voto

Marc Perkel Points 41

Version modifiée de la version ci-dessus:

mkdir /etc/cron.15sec
mkdir /etc/cron.minute
mkdir /etc/cron.5minute

ajouter à /etc/crontab:

* * * * * root run-parts /etc/cron.15sec > /dev/null 2> /dev/null
* * * * * root sleep 15; run-parts /etc/cron.15sec > /dev/null 2> /dev/null
* * * * * root sleep 30; run-parts /etc/cron.15sec > /dev/null 2> /dev/null
* * * * * root sleep 45; run-parts /etc/cron.15sec > /dev/null 2> /dev/null

* * * * * root run-parts /etc/cron.minute > /dev/null 2> /dev/null
*/5 * * * * root run-parts /etc/cron.5minute > /dev/null 2> /dev/null

14voto

scvalex Points 5626

Ne pas en cours d'exécution en arrière-plan?

#!/bin/sh
while [ 1 ]; do
    echo "Hell yeah!"
    sleep 15
done

C'est à peu près aussi efficace qu'il obtient. La partie importante sera exécuté toutes les 15 secondes et le script dort le reste du temps (donc de ne pas gaspiller des cycles).

0voto

Utilisation nanosleep(2). Il utilise une structure timespec qui est utilisé pour spécifier des intervalles de temps avec une précision à la nanoseconde.

struct timespec {
           time_t tv_sec;        /* seconds */
           long   tv_nsec;       /* nanoseconds */
       };

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:

X