guide-preparation-vacances/chapitre_1_2.md

70 lines
3.8 KiB
Markdown
Raw Normal View History

2021-07-09 04:49:36 +00:00
# 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`. Il est aussi possible de mettre le script à exécuter dans un des 4 répertoires suivants
```{.bash linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"}
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
```
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)
```
Le comportement par défaut est d'exécuter le script à chaque minute. Ensuite, si on veut réduire la fréquence, on spécifie à quel moment exécuter le script.
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"
```
Une fois la commande exécutée, nous obtenons cette réponse:
```{.powershell linenos="true" breaklines="true" tabsize="2" fontsize="\small" bgcolor="turquoisefonce!10!white"}
TaskPath TaskName State
-------- -------- -----
\ cocktail-aleatoire Ready
```
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 !