J'ai un script qui doit être exécuté toutes les cinq secondes. Je sais que cron
peut effectuer des tâches à la minute près, mais existe-t-il un moyen d'exécuter une tâche à la seconde?
Cron ne permet qu'une minute au minimum. Ce que vous pouvez faire, c’est écrire un script Shell avec une boucle infinie qui exécute votre tâche, puis se met en veille pendant 5 secondes. Ainsi, votre tâche sera exécutée plus ou moins toutes les 5 secondes, en fonction de la durée de la tâche.
#!/bin/bash
while true; do
# Do something
sleep 5;
done
Vous pouvez créer un fichier my-task.sh
avec le contenu ci-dessus et l'exécuter avec sh my-task.sh
. Vous pouvez éventuellement le configurer avec supervisor
en tant que service afin qu'il démarre au démarrage du système, etc.
On dirait vraiment que vous faites quelque chose que vous ne devriez probablement pas faire cependant. Cela semble faux .
Vous pouvez avoir un travail cron
lancer un script toutes les minutes pour démarrer 12 processus en arrière-plan de la manière suivante:
* * * * * ~/dostuff.sh
dostuff.sh
:
(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
Ma question, cependant, est Que se passe-t-il sur la Terre que pouvez-vous faire et qui doit s'exécuter toutes les 5 secondes?
Il suffit d'utiliser une boucle:
while true ; do ./your-script & sleep 5; done
Cela lancera votre script en tant que tâche en arrière-plan, dormira pendant 5 secondes, puis effectuera une nouvelle boucle. Vous pouvez utiliser Ctrl-C pour l’abandonner ou utiliser toute autre condition au lieu de true
name__, par exemple. ! test -f /tmp/stop-my-script
uniquement en boucle alors que le fichier /tmp/stop-my-script
n'existe pas.
Vous pouvez utiliser le package GNU mcron , une alternative "Vixie cron".
http://www.gnu.org/software/mcron/manual/mcron.html#Top
"Peut facilement permettre de spécifier des points de temps plus fins, c'est-à-dire des secondes. En principe, cela pourrait être étendu à des microsecondes, mais ceci n'est pas implémenté."
Utilisez cacti pour surveiller le routeur et le commutateur, mais Cron ne permet qu'une minute au minimum. Par conséquent, si un port/périphérique est arrêté, aucun avertissement n'est émis avant deux minutes.
La configuration minimale dans cron est de quelques minutes, vous ne pouvez pas la définir pendant 5 secondes. Vous pouvez utiliser Quartz qui permet des secondes. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
Vous pouvez utiliser une minuterie SystemD, qui déclenchera un service - que vous auriez configuré pour faire ce que vous voulez - toutes les 5 secondes.
Supposons que votre unité de service s'appelle mystuff.service
et soit installée dans /etc/systemd/system
(extrayez services utilisateur SystemD si vous voulez remplacer la crontab d’un utilisateur), vous pouvez alors écrire une unité de minuterie pour exécuter le service au démarrage et puis toutes les 5 secondes, comme ceci:
/etc/systemd/system/mystuff.timer
[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target
Rechargez ensuite la configuration de systemd, activez le programmateur et démarrez-le.
J'ai fait ce genre de chose avec beaucoup de succès (et le résultat final dure plusieurs semaines à la fois, jusqu'à ce que la machine soit redémarrée). En ce qui concerne ce que je faisais actuellement, mettre à jour les informations et les mettre en cache - mises à jour toutes les 10 secondes.
#!/bin/sh
SLEEP=5
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# echo and restart...
exec $0
Le 'exec $ 0' redémarre le script, mais remplace le script en cours d'exécution. Il peut être démarré initialement avec une ligne '@reboot' crontab.