Comment exécuter des tâches à intervalle de moins de 1 minute à l’aide du planificateur basé sur le temps Cron
Lorsque vous travaillez avec le planificateur temporel Cron sous Linux, vous pouvez vous retrouver à devoir exécuter des tâches à des intervalles de moins d’une minute. Cependant, les capacités natives de Cron ne permettent pas une planification aussi granulaire. Par défaut, le plus petit intervalle de Cron est d’une minute. Cela peut être limitatif pour certaines applications où les tâches doivent être exécutées toutes les quelques secondes ou à un intervalle de temps plus précis. Dans cet article, nous allons explorer plusieurs méthodes pour surmonter cette limitation et planifier avec succès des tâches à des intervalles de moins d’une minute.
Dans ce tutoriel, vous allez apprendre :
- Comment exécuter des tâches à des intervalles de moins d’une minute à l’aide de diverses méthodes
- Instructions étape par étape pour chaque méthode avec exemple de code
Méthodes d’exécution de travaux à intervalle de moins de 1 minute
Il existe plusieurs méthodes pour exécuter des tâches à des intervalles de moins d’une minute. Chaque méthode a ses propres avantages et convient à différents cas d’utilisation. Vous trouverez ci-dessous trois méthodes que vous pouvez utiliser.
Utilisation d’une boucle while dans un script Bash : l’une des façons les plus simples d’exécuter une tâche à des intervalles inférieurs à une minute consiste à utiliser une boucle while dans un script Bash. Cette méthode implique l’écriture d’un script qui s’exécute en continu, l’exécution d’une commande, puis la mise en veille pendant un nombre de secondes spécifié.
#!/bin/bash while true; do # Your command here sleep 10 doneUtilisation des minuteries systemd :
Les
minuteries Systemd sont pratiques pour planifier des tâches à des intervalles inférieurs à la minute, mais elles peuvent ne pas offrir un chronométrage précis. Des facteurs tels que la charge du système, le temps d’exécution et la granularité du minuteur peuvent introduire de légers retards, ce qui rend l’intervalle légèrement plus long que prévu. Pour les tâches critiques nécessitant un calendrier précis, envisagez d’autres solutions ou ajustez l’intervalle en conséquence.[Unit] Description=Run My Task [Service] ExecStart=/path/to/your/script.sh2. Créez le fichier de minuterie :
- Ensuite, créez un fichier de minuterie correspondant à/etc/systemd/system/mytask.timer. Ce fichier de minuterie contrôle la fréquence d’exécution de la tâche.
– La directiveOnBootSec=10garantit que la minuterie démarre 10 secondes après le démarrage du système.
– La directiveOnUnitActiveSec=10planifie l’exécution de la tâche toutes les 10 secondes après la dernière exécution du service. Ajustez cette valeur pour définir le paramètre interval.
souhaité – Le champWantedBy=timers.targetgarantit que le minuteur est démarré automatiquement au démarrage du système.[Unit] Description=Run My Task Every 10 Seconds [Timer] OnBootSec=10 OnUnitActiveSec=10 [Install] WantedBy=timers.target3. Rechargez systemd et activez le Timer :
– Une fois les deux fichiers créés, rechargez la configuration du gestionnaire systemd pour reconnaître le nouveau service et le minuteur en exécutant :systemctl daemon-reload– Ensuite, activez la minuterie pour qu’elle démarre automatiquement au démarrage :
systemctl enable mytask.timer– Enfin, démarrez la minuterie manuellement pour la première fois (facultatif) :
systemctl start mytask.timer4. Vérifiez l’état de la minuterie :
- Pour vérifier que votre minuterie fonctionne correctement, vous pouvez vérifier son état avec :systemctl status mytask.timer– Cette commande vous montrera si le minuteur est actif et quand il est programmé pour s’exécuter ensuite.
5. Examiner les journaux du minuteur :
- Vous pouvez également consulter les journaux du service et du minuteur à l’aide de la commande journalctl :journalctl -u mytask.service– Cela fournira des détails sur l’exécution de la tâche et tout problème potentiel.
Dans cette configuration, l’unité de service définit la tâche à exécuter, tandis que l’unité de minuterie contrôle la fréquence d’exécution. La directive
OnUnitActiveSec=10dans l’unité de minuterie garantit que la tâche s’exécute toutes les 10 secondes. Cette méthode est plus économe en ressources que l’utilisation d’une boucle while, car elle exploite les capacités intégrées de systemd pour une planification précise.Utilisation d’un hack Crontab avec sommeil : Une autre méthode pour exécuter des tâches à des intervalles inférieurs à une minute consiste à utiliser une entrée Crontab en combinaison avec la commande sleep. Cette méthode vous permet d’échelonner l’exécution de la tâche dans la même minute.
* * * * * /bin/bash -c 'command1; sleep 15; command2; sleep 15; command3'
Dans cette méthode, la boucle while true garantit que le script s’exécute indéfiniment. La commande sleep 10 interrompt le script pendant 10 secondes entre chaque itération, ce qui permet à la tâche de s’exécuter toutes les 10 secondes. Cette méthode est simple mais consomme plus de ressources CPU car elle s’exécute en continu.
Les minuteries Systemd offrent une alternative plus efficace et plus flexible à Cron pour planifier des tâches à des intervalles inférieurs à la minute. Les minuteries Systemd sont particulièrement bien adaptées aux tâches qui nécessitent un chronométrage précis et une consommation de ressources réduite. Vous trouverez ci-dessous les étapes détaillées de la création d’un service systemd et d’un minuteur correspondant pour exécuter votre tâche à un intervalle précis.1. Créez le fichier de service :
Dans cet exemple, la tâche Cron s’exécute toutes les minutes, mais les commandes de mise en veille sont utilisées pour retarder l’exécution des commandes suivantes. Cela divise efficacement la tâche en intervalles plus petits au cours de la même minute. Bien que cette méthode ne permette pas une véritable planification en dessous de la minute, elle peut être utile dans certains scénarios où le timing exact n’est pas critique.
Conclusion
Bien que les capacités par défaut de Cron limitent la planification des tâches à des intervalles d’une minute, il existe plusieurs méthodes pour obtenir une exécution plus fréquente. Que vous choisissiez d’utiliser une boucle while, des minuteries systemd ou une combinaison intelligente de Cron et de veille, chaque approche offre un moyen de surmonter cette limitation. En fonction de vos besoins spécifiques, vous pouvez sélectionner la méthode qui correspond le mieux à vos besoins et à vos ressources système.

