Exécuter une tâche cron à des intervalles irrégulières

Pour faire suite à notre article Exécuter une tâche Cron toutes les 5 minutes il es également possible d’exécuter une tâche cron à des intervalles irrégulières comme, dans l’exemple suivant, chaque 61 minutes.

Les tâche cron à des intervalles irrégulières

Voici notre guide complet pour exécuter tâche cron à des intervalles irrégulières

La plupart des Administrateur de systèmes et développeur préfères traiter les tâches répétitives à l’aide d’un processus automatisé. Si vous utilisez un système d’exploitation de type Unix, un cron job pourrait vous faire gagner du temps en exécutant les tâches automatiquement.

Quoi ne PAS faire

Certain pourraient Êtres tentez d’utiliser une loop avec sleep. Ceci comporte 2 principaux inconvénients.:

  1. Vous gardez un processus ouvert pour rien entre chaque exécution. Dans cet exemple ci, 60 minutes sur 61 sont inutiles.
  2. Si l’exécution fige la prochaine exécution sera retardée, quitte même à ne jamais être lancée. Dans cet exemple ci, si un processus prend 3 minutes à exécuter, la prochaine exécution aura lieu 3 minutes plus tard qu’initialement prévus.
#!/bin/bash
while true; do
  # Executé avant une pause de 61 minutes.
  sleep 61m
done

Solution proposée

La solution proposée est simple, Nous utiliserons un script d’exécution avec bash qui sera lancer à chaque minutes, qui lui vérifiera à l’interne si c’est le moment de lancer les commandes. La logique est tel que:

  1. secondes=$(date +%s) calcule ne nombres de secondes écoulées depuis 1970-01-01 00:00:00 UTC
  2. minutes=$((secondes / 60))divisés les secondes en minutes écoulées.
  3. interval=$((minutes % 61)) l’opérateur %retourne les restes des minutes divisés par l’intervalle.
  4. Finalement une condition vérifie si c’est le cas et exécute les commandes en conséquences.
if [[ $interval == 0 ]] ; then
    #Éxécuté chaques 61 minutes
fi

Script d’exécution

Crée un script et ajuster les variables au besoin. Disons dans ce cas ci interval.sh

#!/bin/bash

secondes=$(date +%s)
minutes=$((secondes / 60)) 
interval=$((minutes % 61))

if [[ $interval == 0 ]] ; then
    #Éxécuté chaques 61 minutes
fi

N’oubliez pas de rendre le script exécutable avec la commande chmod +x interval.sh

Ajouter le script à Cron

Ensuite il suffit de lancer le script à chaque minute en utilisant crontab. Suivez notre guide Exécuter une tâche Cron toutes les 5 minutes au besoin.

Lancez crontab -e et ajouter la ligne suivante en vous assurant de spécifier le chemin du script.

* * * * * /usr/bin/bash /home/user/interval.sh

Ajuster le script

Une fois que nous avons compris le principe il es facile d’ajouter d’autre intervalle dans le même script d’exécution et lancer différentes commandes à différentes intervalles.

Par exemple, reprenons notre l’exemple de notre script et ajoutons une commande chaque 25 heures ainsi qu’une au 4 jours.

#!/bin/bash

secondes=$(date +%s)
minutes=$((secondes / 60)) 

## Au 61 minutes
interval61=$((minutes % 61))
if [[ $interval61 == 0 ]] ; then
    #Éxécuté chaques 61 minutes
fi

## Au 25 heures
## 60 minutes * 25 heures = 1500 minutes
interval1500=$((minutes % 1500)) 
if [[ $interval1500 == 0 ]] ; then
    #Éxécuté chaques 25 heures
fi

## Au 4 jours
## 60 minutes * 24 heures * 4 jours = 5760 minutes
interval5760=$((minutes % 5760)) 
if [[ $interval5760 == 0 ]] ; then
    #Éxécuté chaques 4 jours
fi
S’abonner
Notifier de
guest
0 Commentaires
Inline Feedbacks
View all comments