Cron est un utilitaire de planification qui peut planifier l’exécution régulière de scripts. Selon Wikipedia, l’acronyme signifie « organisateur chronologique. Il est écrit dans le langage de programmation PERL sous la forme d’une application TSR (Terminate and Stay Resident) qui exécute des tâches à des moments spécifiés. Si vous devez exécuter quoi que ce soit à intervalles réguliers ou si vous souhaitez exécuter quoi que ce soit automatiquement sans aucune intervention de l’utilisateur, les tâches cron sont la solution. Que vous souhaitiez supprimer d’anciens fichiers, envoyer un certain e-mail, transférer un fichier d’un emplacement à un autre, etc., les tâches cron peuvent être utilisées pour automatiser de nombreuses tâches. Cet article vous aidera à configurer crontab en Python.
Une tâche cron est une commande exécutée automatiquement en arrière-plan par un système d’exploitation. Ils sont utilisés pour des tâches spécifiques comme la maintenance des bases de données, le nettoyage des fichiers indésirables qui peuvent encombrer votre ordinateur ou même déclencher l’envoi d’e-mails à certains moments. Les crontabs sont les constructions dans lesquelles vous programmerez vos travaux. Dans ce didacticiel, vous découvrirez les tâches cron et pourquoi elles sont nécessaires. Ensuite, vous découvrirez le système « crontab » et comment il peut fonctionner en Python. En utilisant le module crontab en Python, vous pourrez modifier et créer des tâches cron dans vos programmes, quel que soit le but que vous choisissez de les utiliser.
Comment devez-vous gérer les tâches cron avec python ?
Lors de la configuration de crontab en Python, il est toujours judicieux de gérer le démon cron de manière ordonnée. Un exemple se produit lorsque nous devons planifier une commande, puis définir la tâche cron sans avoir à la modifier manuellement. Les bibliothèques Python ou python-crontab sont des méthodes simples et efficaces pour accéder à la crontab dans le code python, fournissant des outils qui permettent aux programmeurs de charger des tâches cron en tant qu’objets, de les rechercher et d’enregistrer leurs actions. Les tâches sont spécifiées en les écrivant dans un fichier appelé (au moins avec Python) un crontab, qui contient des instructions concernant le moment où ces tâches doivent être exécutées. Cron continuera à s’exécuter après l’exécution de la tâche jusqu’à ce qu’elle soit terminée de force par une commande défectueuse ou en raison d’une erreur irrécupérable.
Python-Crontab simplifie l’accès à Crontab depuis vos scripts ou applications Python. Vous pouvez surveiller, gérer ou automatiser les tâches à partir d’une application Python en cours d’exécution qui communique avec le démon cron. Vous devrez d’abord installer Python-crontab en utilisant ‘pip3’ pour utiliser cron ; Vous pouvez le faire avec :
pip3 install python-crontab
Créer une simple tâche Cron
Pour commencer, vous devrez ajouter une tâche cron à votre crontab. Démarrez un terminal et tapez ce qui suit. L’argument supplémentaire « -e » ici est une référence à l’édition.
crontab -e
Après avoir entré la commande, vous devriez voir quelque chose de similaire à ce qui est montré dans l’image suivante :
Entrez la tâche cron suivante tout en bas de votre crontab. Ce cronjob redirige la date et l’heure actuelles dans un fichier « test.txt » dans notre cas et l’enregistre. Après avoir collé la commande fournie ci-dessous, enregistrez-la à l’aide de la touche ctrl+x, puis appuyez sur Entrée.
* * * * * date > /home/linux/cron/test.txt
Remarque : Remplacez « linux » par le nom de votre PC ou obtenez le chemin absolu de votre fichier de projet avec la commande pwd. Pour l’exécuter, rendez-vous dans le dossier où vous avez créé votre fichier de projet et exécutez la commande suivante dans le terminal :
pwd
Maintenant, pour expliquer ce que fait exactement cette commande ; il est essentiellement exécuté toutes les minutes, nous indiquant la date, l’heure et le fuseau horaire. L’astérisque 5 représente ici que l’exécution de la commande signifie s’exécuter chaque minute de chaque jour de chaque semaine de chaque mois.
La syntaxe de Cron est essentiellement celle-ci :
.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- the day of the month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- the day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * command to be executed
Field | Allowed Values | Special Characters | Extra Values |
Minutes | 0-59 | * / , – | < > |
Hours | 0-23 | * / , – | < > |
Day | 1-31 | * / , – | < > |
Month | 1-12 or Jan-Dec | * / , – | < > |
Day of week | 0-6 or Sun-Sat | * / , – | < > |
Pour le comprendre plus clairement, visitez le site Web de Crontab Guru et utilisez leur éditeur pour les expressions de planification cron afin d’obtenir la combinaison de chiffres exacte dont vous avez besoin.
Vérifiez maintenant si cela fonctionne réellement en exécutant une autre fenêtre de terminal et utilisez la commande watch pour afficher le contenu du fichier test.txt.
watch cat /home/linux/cron/test.txt
Vous devriez obtenir des résultats quelque peu similaires à l’image suivante :
Remarque : Vous pouvez obtenir un « Aucun fichier ou répertoire de ce type », car les tâches cron ne sont pas exécutées immédiatement, cela peut prendre un certain temps pour afficher les résultats.
Ici vous pouvez voir, vous obtenez la date – vendredi 15 octobre 2021, heure 05:39:01 PM, et le fuseau horaire IST. Vous pouvez le voir en action si vous pouvez attendre une minute et il s’incrémente automatiquement d’une minute.
Planification d’un fichier Python avec Crontab
Avec une bonne compréhension de la ligne de commande et des principes d’exécution des commandes cron, passons à autre chose et parcourons un exemple spécifique. Par souci de simplicité, nous allons écrire un programme Python simple pour enregistrer la date, l’heure et un nombre aléatoire entre 1 et 100 à la fin d’un fichier. Créez un fichier dans le répertoire cron que nous avons créé appelé script_test.py avec le contenu suivant :
import random
from datetime import datetime
now = datetime.now()
num = random.randint(1, 101)
with open('/home/linux/cron/script_test.txt', 'a') as f: #write your own path here
f.write('{} - The random number is {}\n'.format(now, num))
Il est important dans ce cas d’exécuter le script avant de pouvoir l’utiliser comme tâche cron. Exécutez le script en allant dans le fichier projet et exécutez-le avec :
python3 script_test.py
Vérifiez que le programme a fonctionné ou non avec le chat.
cat /home/linux/cron/script_test.txt
S’il fonctionnait correctement, il devrait afficher quelque chose comme ceci :
2021-10-15 19:38:43.900174 - The random number is 90
Maintenant, ajoutez un cronjob pour exécuter le programme script_test.py toutes les minutes. Ouvrez le fichier crontab comme avant.
crontab -e
Ajoutez le chemin approprié de votre fichier de projet avec la syntaxe devant :
* * * * * /home/linux/cron/script_test.py
Remarque : Vous devez utiliser des chemins absolus pour tout ce qui se trouve dans votre crontab.
De nouveau. vérifiez si cela fonctionne ou non avec la commande watch.
watch cat /home/linux/cron/script_test.txt
Et si cela a fonctionné, vous verrez un résultat comme celui-ci :
Ici, il continuera à se mettre à jour toutes les minutes en indiquant la date, l’heure et un nombre aléatoire ; et cela explique à peu près comment fonctionnent les tâches cron et comment vous pouvez configurer crontab en Python. Maintenant, vous ne voulez pas que ça tourne toute la journée, n’est-ce pas ? Vous pouvez effacer la crontab avec la commande suivante qui réinitialisera tout ce que vous avez fait dans la section crontab -e.
crontab -r
Bogues courants
Maintenant, si vous avez suivi l’article avec précision et avez fait tout ce qui est dit, vous ne devriez pas avoir de problèmes, mais il y a beaucoup de pièges ! Moments où vous configurez crontab en Python. J’en ai quelques-uns dans ce qui suit si vous êtes bloqué à un moment donné.
Permission refusée
Utilisez chmod +x devant le chemin de votre fichier et exécutez-le dans le terminal.
Le script ne fonctionne pas
Ajoutez ceci « #!/usr/bin/env python3 » tout en haut et cela devrait résoudre le problème.
Tout ce qui ne fonctionne pas, donne de mauvais résultats
Ce sont les chemins, vérifiez chaque chemin que vous avez écrit, peut-être que certains d’entre eux sont cassés ou ont une faute de frappe.
Voici quelques tutoriels utiles que vous pouvez lire :