Il est possible de demander à macOS ou à Linux de lancer une tâche automatiquement de façon récurrente à un moment donné, par exemple à une date et heure précise ou encore à toutes les heures.
Je vais vous montrer comment faire à l'aide de l'utilitaire cron.
cron peut lancer à peu près n'importe quelle tâche. Habituellement, les tâches seront regroupées dans un fichier bash. C'est ce fichier qui sera lancé automatiquement.
Suivez ces étapes pour y arriver :
Note : c'est une bonne habitude de placer tous les fichiers utilisés par des tâches cron dans le même dossier, par exemple /Users/monnom/Documents/scripts sous macOS ou /home/pi/scripts sous Linux.
Remarquez que sous macOS, lorsque le nom du fichier bash se termine par .command, ceci permet de lancer également le fichier en double-cliquant sur son nom dans le Finder. Si vous lui donnez une extension .bash, il devra être lancé en ligne de commande.
Sous Linux, on utilisera l'extension .bash.
Voici donc le code de ce fichier bash. Vous devrez bien sûr ajuster le chemin du fichier datecourante.txt.date >> /Users/monnom/Documents/datecourante.txt
chmod 755/Users/monnom/Documents/scripts/test.bash
Sous macOS, ceci est réalisé en double-cliquant sur son nom dans le Finder.
Sous Linux, lancez cette commande alos que vous êtes dans le dossier du script :
./test.bash
Sat Sep 3 07:20:00 EDT 2022
crontab -e
Sous macOS, le fichier sera automatiquement ouvert dans l'éditeur Vim.
Sous Linux, vous avez le choix entre différents éditeurs. Je vous suggère nano puisqu'il est plus intuitif.
Dans Vim, Pour passer en mode insertion, appuyez sur la lettre i.
Vous devez entrer une commande par ligne et vous assurer de faire un saut de ligne après la dernière commande. Dans cet exemple, je demande à lancer le fichier bash à toutes les minutes.
* * * * * /Users/monnom/Documents/scripts/test.bash
Sous Nano, appuyez sur Ctrl + X.
crontab -l
Si vous ne voyez rien, assurez-vous d'avoir fait un retour à la fin de la commande dans le fichier cron.
Si tout a fonctionné, vous verrez votre commande à l'écran.
monnom@MacBook-Pro-de-MonNom ~ %crontab -l
* * * * * /Users/monnom/Documents/scripts/test.bash
Une fois que vous avez réussi votre exploit à l'aide du fichier bash de test, n'oubliez pas d'enlever cette ligne dans votre fichier cron sinon, vous ralentirez votre ordinateur inutilement.
Vous pouvez maintenant ajuster votre fichier cron pour lancer le fichier bash qui répond à votre besoin!
Il n'est pas nécessaire de savoir où est stocké le fichier cron pour pouvoir l'utiliser mais sachez qu'il y aura un fichier pour chaque usager qui définit des tâches automatiques.
Si vous êtes curieux et souhaitez voir ces fichiers, vous pouvez lancer ces commandes :
sudo su
cd /var/at/tabs
ls
monnom@MacBook-Pro-de-MonNom ~ %sudo su
Password:
sh-3.2# cd /var/at/tabs
sh-3.2# ls
monnom
sh-3.2#
Il est même possible de voir le contenu brut de ce fichier à l'aide de la commande cat. Mais n'allez surtout pas l'éditer directement!
sh-3.2# cat monnom
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.cGQAftQAd8 installed on Sat Sep 3 07:26:01 2022)
# (Cron version -- $FreeBSD: src/usr.sbin/cron/crontab/crontab.c,v 1.24 2006/09/03 17:52:19 ru Exp $)
* * * * * /Users/monnom/Documents/scripts/test.bash
Sous Linux (ici : Raspberry Pi OS), lancez plutôt cette commande :
sudo ls /var/spool/cron/crontabs/
pi@raspberrypi:~ $ sudo ls /var/spool/cron/crontabs/
pi
On voit ici qu'il y a un fichier pour l'usager pi.
Afficher le contenu de ce fichier donnera le même résultat que la commande crontab -l.
pi@raspberrypi:~ $ sudo cat /var/spool/cron/crontabs/pi
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.A1BtAB/crontab installed on Thu Feb 2 19:58:10 2023)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
* * * * * /home/pi/scripts/test.bash
La syntaxe crontab consiste en une série de 5 blocs de caractères, chacun suivi par un espace, qui précise le moment où une tâche doit être lancée.
Il existe des petits utilitaires pour vous aider à définir ce moment, par exemple https://crontab.guru/.
Avec un peu de pratique, vous pourrez entrer vous même la chaîne crontab.
Dans une chaîne crontab, chacun des blocs représente, dans l'ordre :
On fait suivre ensuite la commande à exécuter.
Pour chaque bloc, il est possible d'entrer :
une valeur numérique valide (ex : 0 en 5e position indique dimanche)
une liste de valeurs séparées par des virgules (ex : 10,15 en 2e position signifie à 10h et à 15h)
une étendue consistant à deux valeurs séparées par un trait d'union (ex : 0-30 en première position signifie à l'heure juste, à l'heure et une minute, et deux minutes... et 30 minutes).
un astérisque (ex : * en 3e position signifie à n'importe quel jour du mois)
Voici quelques exemples pratiques.
* * * * * : à toutes les minutes (n'importe quelle minute, n'importe quelle heure, n'importe quel jour du mois, etc.)
0 * * * * : à toutes les heures
15 * * * * : à toutes les fois qu'on est 15 minutes passé l'heure. Donc, à 1h15, 2h15, 3h15, etc.
0 10 1 * * : à tous les premiers du mois à 10h00
30 17 * * 0 : à tous les dimanches à 17h30
59 23 24 12 * : à tous les 24 décembre à 23h59
0 17 * * 5 : à tous les vendredis à 17h00
0,30 15 * * * : à tous les jours à 15h00 et à 15h30
0-30 15 * * * : à tous les jours à 15h00, 15h01, 15h02, ... 15h30
0 8 * * 1-3 : à 8h00 les lundis, mardis et mercredis
▼Publicité