J'ai un script qui doit être exécuté toutes les cinq secondes. Je sais que cron
peut effectuer des tâches à la minute, mais existe-t-il un moyen d'exécuter quelque chose à chaque seconde ?
Réponses
Trop de publicités?Cron ne permet qu'un minimum d'une minute. Ce que vous pourrait est d'écrire un Shell Shell avec une boucle infinie qui exécute votre tâche, puis dort pendant 5 secondes. De cette façon, votre tâche serait exécutée plus ou moins toutes les 5 secondes, en fonction du temps que prend la tâche elle-même.
#!/bin/bash
while true; do
# Do something
sleep 5;
done
Vous pouvez créer un my-task.sh
avec le contenu ci-dessus et l'exécuter avec sh my-task.sh
. En option, vous pouvez le configurer avec supervisor
comme un service pour qu'il démarre au démarrage du système, etc.
On dirait vraiment que tu fais quelque chose que tu ne devrais probablement pas faire. Cela semble mauvais .
Vous pourriez avoir un cron
job kick-off un script chaque minute qui démarre 12 processus en arrière-plan ainsi :
* * * * * ~/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 Qu'est-ce qui se passe sur Terre ? que vous pourriez faire qui doit être exécuté toutes les 5 secondes ?
Utilisez simplement une boucle :
while true ; do ./your-script & sleep 5; done
Ceci lancera votre-script en tant que tâche d'arrière-plan, dormira pendant 5 secondes, puis bouclera à nouveau. Vous pouvez utiliser Ctrl-C pour l'interrompre, ou utiliser toute autre condition à la place de true
par exemple ! test -f /tmp/stop-my-script
pour ne boucler que lorsque le fichier /tmp/stop-my-script
n'existe pas.
Vous pouvez utiliser le paquetage GNU mcron une alternative à "Vixie cron".
http://www.gnu.org/software/mcron/manual/mcron.html#Top
"Il est facile de spécifier des points de temps plus fins, par exemple des secondes. En principe, cela pourrait être étendu aux microsecondes, mais cela n'est pas implémenté."
Vous pourriez utiliser une unité de temporisation SystemD, qui déclenchera un service - que vous aurez configuré pour faire ce que vous voulez - toutes les 5 secondes.
Supposons que votre unité de service s'appelle mystuff.service
et est installé dans /etc/systemd/system
(voir Services aux utilisateurs de SystemD si vous voulez remplacer la crontab d'un utilisateur), alors vous pouvez écrire une unité de temporisation pour exécuter le service au démarrage et ensuite 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
Ensuite, rechargez la configuration systemd, activez l'unité de temporisation et démarrez-la.
- Réponses précédentes
- Plus de réponses