70 lines
3.8 KiB
Markdown
70 lines
3.8 KiB
Markdown
|
# 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 !
|