Comment exécuter un Cron Job toutes les 30 secondes ?

Publié 27 août 2024

Problème : Exécuter des tâches cron plus fréquemment

Les tâches cron s'exécutent généralement à des intervalles d'une minute ou plus. Cependant, certaines tâches doivent être exécutées plus souvent, par exemple toutes les 30 secondes. Cela crée un problème pour les utilisateurs qui souhaitent planifier des tâches à exécuter plus fréquemment que ne le permet le système cron standard.

Solution n°1 : Utiliser la méthode Cron et Sleep

Création d'un script Shell pour des intervalles de 30 secondes

Pour exécuter une tâche toutes les 30 secondes en utilisant cron et sleep, créez un script shell. Ce script contiendra votre tâche et une commande sleep pour créer l'intervalle de 30 secondes. Voici un exemple :

#!/bin/bash

# Votre tâche va ici
echo "Tâche exécutée à $(date)" >> /chemin/vers/fichier.log

# Pause de 30 secondes
sleep 30

# Exécuter la tâche à nouveau
echo "Tâche exécutée à $(date)" >> /chemin/vers/fichier.log

Enregistrez ce script sous le nom "tache_toutes_les_30s.sh". Définissez les permissions du script pour l'exécution :

chmod +x /chemin/vers/tache_toutes_les_30s.sh

Ce script exécute votre tâche, enregistre l'heure d'exécution, attend 30 secondes, puis exécute à nouveau la tâche. En planifiant ce script pour qu'il s'exécute toutes les minutes avec cron, vous obtenez un intervalle de 30 secondes entre les exécutions de la tâche.

Planification du script avec Crontab

Pour planifier le script avec crontab :

  1. Ouvrez le fichier crontab pour l'édition :

    crontab -e
  2. Ajoutez cette ligne pour exécuter le script toutes les minutes :

    * * * * * /chemin/vers/tache_toutes_les_30s.sh
  3. Sauvegardez et quittez l'éditeur crontab.

Pour vérifier si la tâche cron est configurée, affichez les entrées crontab actuelles :

crontab -l

Cela devrait afficher la ligne que vous avez ajoutée au fichier crontab.

Pour vérifier que votre script s'exécute, consultez le fichier journal que vous avez spécifié dans le script :

tail -f /chemin/vers/fichier.log

Cette méthode offre un moyen simple d'exécuter des tâches toutes les 30 secondes en utilisant cron et un script shell avec une commande sleep.

Solution n°2 : Planification de 2 tâches Cron avec 30 secondes de pause

Cette méthode utilise deux tâches cron, s'exécutant à des minutes alternées avec une commande sleep pour obtenir un intervalle de 30 secondes. Voici comment la configurer :

  1. Créez deux scripts shell :

Script 1 (executer_tache_1.sh) :

#!/bin/bash
sleep 0
/chemin/vers/votre/tache

Script 2 (executer_tache_2.sh) :

#!/bin/bash
sleep 30
/chemin/vers/votre/tache
  1. Rendez les scripts exécutables :

    chmod +x executer_tache_1.sh executer_tache_2.sh
  2. Modifiez le fichier crontab :

    crontab -e
  3. Ajoutez ces lignes au crontab :

    * * * * * /chemin/vers/executer_tache_1.sh
    * * * * * /chemin/vers/executer_tache_2.sh

Cette configuration exécute le premier script au début de chaque minute et le deuxième script 30 secondes plus tard. Le résultat est une exécution de la tâche toutes les 30 secondes.

Avantages :

  • Facile à configurer
  • Utilise le système cron standard
  • Utilise peu de ressources

Inconvénients :

  • Le timing peut dériver au fil du temps
  • Difficile de changer l'intervalle

Cette solution fonctionne pour la plupart des tâches qui doivent s'exécuter toutes les 30 secondes sans nécessiter un timing exact.

Approches alternatives pour l'exécution de tâches sous-minute

Utilisation de scripts basés sur des boucles

Vous pouvez créer un script qui s'exécute en continu pour effectuer des tâches toutes les 30 secondes. Cette méthode implique l'écriture d'un script qui s'exécute en boucle, effectuant la tâche puis faisant une pause de 30 secondes avant la prochaine exécution.

Voici un exemple simple de script basé sur une boucle :

#!/bin/bash

while true; do
    # Votre tâche va ici
    echo "Tâche exécutée à $(date)"

    # Pause de 30 secondes
    sleep 30
done

Avantages de cette méthode :

  • Facile à mettre en œuvre
  • Contrôle précis du timing
  • Pas besoin de cron ou systemd

Inconvénients de cette méthode :

  • Le script doit fonctionner en continu
  • Il utilise constamment des ressources système
  • Si le script s'arrête, la tâche cesse de s'exécuter

Utilisation de services cloud pour une planification précise

Les services cloud comme AWS Lambda avec CloudWatch Events offrent un timing précis pour l'exécution des tâches. Cette approche déplace la planification et l'exécution vers le cloud, ce qui peut être utile pour certaines tâches.

Pour utiliser AWS Lambda et CloudWatch Events :

  1. Créez une fonction Lambda qui effectue votre tâche.
  2. Configurez une règle CloudWatch Event pour déclencher la fonction Lambda toutes les 30 secondes.

Points à considérer lors de l'utilisation de solutions basées sur le cloud :

  • Coût : Les services cloud facturent en fonction de l'utilisation, ce qui peut s'accumuler pour des tâches fréquentes.
  • Dépendance réseau : L'exécution de votre tâche dépend de la connectivité Internet.
  • Configuration : Cela nécessite une connaissance des services cloud et peut être plus difficile à configurer que les solutions locales.
  • Évolutivité : Les services cloud peuvent mieux gérer l'augmentation de la charge que les systèmes locaux.
  • Surveillance : Les plateformes cloud offrent souvent des outils intégrés de surveillance et de journalisation.

Choisissez la méthode qui convient le mieux à vos besoins, en tenant compte de facteurs tels que la complexité de la tâche, l'utilisation des ressources et les exigences en matière d'infrastructure.