# Programmer l'exécution de scripts

Nous avons maintenant créé le script parfait qui exécute les tâches ennuyantes que nous faisions auparavant manuellement. Maintenant, puisque nous planifions partir en vacances, il faut dire à notre système quand exécuter le script et à quelle fréquence. C'est ce que `cron` permet de faire sur GNU/Linux et macOS. Sur Windows, c'est le planificateur de tâches `schtasks.exe`.

Notez qu'il existe aussi des applications graphiques pour chacun de ces systèmes. Mais, vous êtes ici pour voir un peu de code non ?

## cron sur Linux et macOS

Le logiciel cron est inclus par défaut sur la majorité des systèmes macOS et GNU/Linux. Il n'y a donc rien à faire pour l'obtenir. Cependant, il est possible qu'il nécessite des accès additionnels pour bien fonctionner sur macOS.

Les instructions pour cron sont inscrites dans un fichier spécial au format `crontab` dans le répertoire `/etc/cron.d`.

Le format des instructions dans un fichier `crontab` est défini comme dans cette illustration:

```{.bash linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"}
*   *   *   *   *   *    script_a_executer.sh
|   |   |   |   |   |
|   |   |   |   |   +--- nom utilisateur
|   |   |   |   +----- jour de la semaine (0-6) (Dimanche=0)
|   |   |   +------- mois (1-12)
|   |   +--------- jour du mois (1-31)
|   +----------- heure (0-23)
+------------- minutes (0-59)
```

Par exemple, pour exécuter un script `cocktail_aleatoire.sh` qui nous envoie une recette de cocktail au hasard à 16h30 chaque vendredi, on configure comme suit.

```{.bash linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"}
30  16  *  *  5  jevalideca /home/jevalideca/cocktail_aleatoire.sh
```

## Planificateur de tâches sur Windows

Sur Windows, l'ensemble des tâches peuvent être planifiées depuis le Planificateur de tâches. En exécutant une commande PowerShell, il est possible de configurer une tâche similaire à la précédente.

À partir d'une session PowerShell, la séquence de commandes suivante configurera l'exécution du programme `cocktail_aleatoire.bat` à 16:30 chaque vendredi.

```{.powershell linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"}
$action = New-ScheduledTaskAction -Execute 'C:\Users\jevalideca\scripts\cocktail_aleatoire.bat'
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Friday -At 4:30pm
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "cocktail-aleatoire"
```

Nous pouvons valider le résultat dans la fenêtre du Planificateur de tâches.

![Capture d'écran du planificateur de tâches](capture_schtasks_cocktail.png)

## Conclusion

J'ai présenté deux techniques qui permettent de scripter et de configurer l'exécution automatique de tâches.

Il est maintenant possible de faire travailler ton ordinateur durant tes vacances !
