Comprendre les tâches Cron (Cron Jobs) et la syntaxe cron
Dans cette étape, nous allons présenter les tâches Cron (Cron Jobs) et la syntaxe cron.
Les tâches Cron (Cron Jobs) sont des "tâches planifiées" dans le système Linux, couramment utilisées pour programmer des commandes qui doivent être exécutées périodiquement, comme des sauvegardes régulières de données ou la suppression du cache. Elles sont appelées tâches Cron parce qu'elles utilisent l'outil cron
(crontab).
Les tâches Cron sont l'un des outils les plus couramment utilisés par les administrateurs système, et elles sont en elles-mêmes d'excellents outils. Cependant, si les "tâches planifiées" sont configurées pour s'exécuter avec des privilèges d'utilisateur plus élevés (par exemple, en tant qu'utilisateur root), elles peuvent potentiellement être exploitées par des attaquants pour monter en privilèges.
La commande crontab
utilise la syntaxe suivante :
* * * * * [ user ] File/Command
- - - - -
| | | | |
| | | | +----- Jour de la semaine (0 - 7) (0 = dimanche)
| | | +---------- Mois (1 - 12)
| | +--------------- Jour du mois (1 - 31)
| +-------------------- Heure (0 - 23)
+------------------------- Minute (0 - 59)
Le champ user
est facultatif. Si non spécifié, la commande ou le script sera exécuté avec les privilèges de l'utilisateur actuel.
Notez que seul l'utilisateur root peut spécifier l'exécution de commandes ou de scripts avec les privilèges d'autres utilisateurs.
Par exemple, si nous voulons afficher le journal des erreurs Apache toutes les heures, nous pouvons utiliser la déclaration suivante :
0 * * * * echo /var/log/lastlog
Étant donné que heure
, jour
, mois
et jour de la semaine
sont tous définis sur *
, la tâche planifiée sera exécutée une fois chaque fois que la minute atteint 0, c'est-à-dire toutes les heures.
Et si nous devons exécuter une commande toutes les deux heures à la 15e minute? Nous pouvons apporter une modification simple :
15 */2 * * * echo /var/log/lastlog
Pour comprendre l'utilisation de cron
, passons par un exemple.
-
Ouvrez le terminal et accédez au répertoire /home/labex/project
. Ensuite, exécutez la commande suivante pour initialiser l'environnement du laboratoire :
./env_setup1.sh
Après une initialisation réussie, vous verrez le fichier cleanup.py
et le répertoire trashDirectory
dans le répertoire personnel de l'utilisateur labex
. Le répertoire trashDirectory
contient deux fichiers : error.log
et readme.txt
.
Notre objectif pour le laboratoire est le suivant : Utilisez crontab
pour ajouter une tâche planifiée qui appelle le script cleanup.py
toutes les minutes pour supprimer toutes les données dans le répertoire /home/labex/project/trashDirectory
. Le script cleanup.py
appelle simplement la commande système rm
via la fonction os.system()
pour vider le répertoire /home/labex/project/trashDirectory
.
-
Ensuite, utilisez la commande suivante pour ajouter une tâche planifiée dans crontab
:
echo "* * * * * root python /home/labex/project/cleanup.py" | sudo tee -a /etc/crontab > /dev/null
La commande ci-dessus ajoute une tâche planifiée au fichier crontab
. La tâche sera exécutée toutes les minutes
, et le script cleanup.py
sera exécuté avec les privilèges de l'utilisateur root.
-
Étant donné que le service cron
est désactivé par défaut sur notre machine de laboratoire, nous devons le démarrer manuellement avec la commande suivante :
sudo service cron start
Sortie attendue :
* Starting periodic command scheduler cron
Après environ une minute
, si nous entrons dans le répertoire /home/labex/project/trashDirectory
et utilisons la commande ls
, nous verrons que les données du répertoire ont été supprimées, ce qui indique que la tâche Cron s'exécute correctement.