Formation · le faire tourner sans toi
Les tâches planifiées, sur Windows et sur un serveur.
La deuxième marche : quelque chose d'autre que toi lance le programme. Une tâche a été créée, vérifiée, lancée et supprimée le 03/09 pour relever chaque sortie exacte, y compris les quatre réglages par défaut qui font qu'une tâche ne part pas.
La commande qui crée la tâche , celle qui prouve qu'elle existe, les quatre pièges du Planificateur Windows , launchd sur Mac, l'équivalent sur un serveur et comment savoir qu'elle a tourné.
Avant cette leçon Tu arrives ici directement ? Ces leçons préparent ce qu'elle suppose (le dossier, les outils installés) :
Windows
Mac
Touche ton ordinateur ci-dessus : les commandes du guide s'adaptent. Testé sous Windows 11. Les passages Mac suivent la documentation d'Apple et d'Anthropic.
Ce que tu vas faire
Créer la tâche, en une commande
Prouver qu'elle existe et la lancer sans attendre
Les quatre réglages par défaut qui la font ne pas partir
La même chose sur un serveur, qui ne s'éteint jamais
Savoir qu'elle a tourné, sans aller voir
La leçon d'avant Ce que veut dire automatiser, concrètement →
Avant tout : ton programme doit marcher depuis n'importe où
C'est la première cause d'échec et elle n'a rien à voir avec la planification. Une tâche planifiée ne démarre pas dans ton dossier, elle démarre ailleurs, souvent dans un dossier système. Tout ce que ton programme désigne par un nom court devient introuvable.
L'heure arrive Le Planificateur lance Depuis un autre dossier Ton programme doit s'y retrouver La tâche ne démarre pas chez toi. Tout chemin court devient introuvable.
Pour essayer, il te faut un programme minuscule, rappel.py, qui note seulement l'heure à laquelle il a été lancé. Crée un dossier d'essai, lance Claude dedans et demande-le. Quatre blocs, un par un, Entrée après chacun :
Dans le terminal Copier
cd ~
Dans le terminal Copier
mkdir essai-rappel
Dans le terminal Copier
cd essai-rappel
Avant de lancer claude, regarde la ligne où tu tapes : elle doit finir par essai-rappel. Sinon le cd a raté, ne lance rien. Sur Windows, tes Documents sont parfois rangés dans OneDrive : clic droit sur Documents dans l'explorateur, Propriétés, onglet Emplacement, pour le bon chemin.
Dans le terminal Copier
claude
Quand ça a marché, tu vois ça : ton dossier en haut. En bas, la ligne ❯ où tu écris. Chez toi, la deuxième ligne peut citer un autre modèle ou une autre formule. Tu lis « commande introuvable » à la place ? Claude Code n'est pas installé : reprends la leçon d'installation
Puis la demande, dans Claude :
À écrire dans Claude Code Copier
Écris un programme Python rappel.py qui ajoute la date et l'heure
à la fin d'un fichier journal.txt rangé à côté de lui. Il sera
lancé par une tâche planifiée depuis un autre dossier :
calcule chaque chemin à partir de son propre emplacement.
Lance-le une fois pour vérifier.
Ce qu'il a écrit, sans qu'on le demande. Rien à coller, c'est pour voir :
Ce que tu obtiens
journal = Path(__file__).resolve().parent / "journal.txt"
# le fichier est créé à côté du programme, quel que soit le dossier
# depuis lequel la tâche le lance
Pas besoin de lire le Python : __file__ désigne le programme lui-même et la ligne dit « le journal est dans le même dossier que moi ».
La phrase à ajouter
Dis-le dans ta demande : « ce programme sera lancé par une tâche planifiée, donc tous les chemins doivent être calculés à partir de l'emplacement du fichier, jamais du dossier courant ». Une phrase et la panne la plus fréquente disparaît.
01
Créer la tâche, en une commande
Sur Windows, l'outil s'appelle schtasks et il tient sur une ligne. Voici celle du 03/09, qui lance un programme toutes les cinq minutes :
Dans le terminal Copier
schtasks /create /tn BuildTest /tr "C:\...\python.exe C:\...\rappel.py " /sc minute /mo 5
Ce qu'il répond :
Ce que tu obtiens
Opération réussie : la tâche planifiée "BuildTest" a été créée.
Le morceau Ce qu'il dit /tn BuildTestLe nom de la tâche. C'est par lui que tu la retrouveras /tr "…"Quoi lancer : le chemin complet de Python, puis celui du programme /sc minute /mo 5Toutes les 5 minutes. Ailleurs : /sc daily /st 06:00 /sc monthly /d 1 /st 06:00Le 1er de chaque mois à 6 h, celui du rapport
Les deux chemins en surligné sont les tiens. Celui de python.exe s'obtient avec la commande ci-dessous, dans PowerShell : prends la ligne qui ne contient pas WindowsApps. Celui de rappel.py est ton dossier d'essai suivi du nom du fichier. Tu peux aussi demander les deux à Claude.
Dans le terminal Copier
where.exe python
Ce qu'il répond, par exemple :
Ce que tu obtiens
C:\Users\Jean \AppData\Local\Programs\Python\Python312\python.exe
C:\Users\Jean \AppData\Local\Microsoft\WindowsApps\python.exe ← pas celle-ci
Un espace dans un chemin, par exemple un dossier personnel au nom de « Jean Dupont », fait que la commande coupe le chemin à l'espace et que la tâche ne trouve rien. Dans ce cas, ne bricole pas les guillemets : demande à Claude d'écrire la commande pour toi, c'est la demande de l'encadré suivant.
Où ça
Tu n'as pas à retenir tout ça. Demande : « programme ce script pour tourner le 1er de chaque mois à 6 h avec le Planificateur de tâches, montre-moi la commande, vérifie que la tâche existe, lance-la une fois à la main pour prouver qu'elle marche ». Il fait les quatre.
Ne lance pas schtasks depuis Git Bash, le terminal installé avec git dans la leçon Le dossier, le repo (le dossier d'un projet avec tout son historique, gardé par git. Il peut être privé ou public) et git . Il transforme /query en chemin de fichier et répond « Argument ou option non valide ». Ce n'est pas ta tâche qui est cassée, c'est le terminal. Ces commandes se tapent dans PowerShell, le terminal ouvert depuis la leçon Le terminal sans peur .
Sur Mac, schtasks et le Planificateur de tâches n'existent pas. L'équivalent s'appelle launchd : une tâche y est un petit fichier de réglages en .plist, rangé dans le dossier ~/Library/LaunchAgents, qui dit quoi lancer et quand. Tu ne l'écris pas à la main : tu le demandes à Claude, dans ton dossier d'essai :
À écrire dans Claude Code Copier
Crée une tâche launchd (un LaunchAgent) qui lance rappel.py toutes les
cinq minutes. Range le fichier .plist dans ~/Library/LaunchAgents,
avec le chemin complet de Python et le chemin complet de rappel.py,
puis charge-la avec launchctl. Envoie ce qui sort et les erreurs dans
un fichier journal-launchd.txt à côté du programme. Donne-lui le nom
com.moi.rappel . Montre-moi le fichier et chaque commande lancée.
Ce que tu lis dans le .plist Ce qu'il dit LabelLe nom de la tâche. C'est par lui que tu la retrouveras ProgramArgumentsQuoi lancer : le chemin complet de Python, puis celui du programme StartInterval 300Toutes les 300 secondes, donc 5 minutes StartCalendarIntervalÀ une date fixe : jour 1, heure 6, minute 0 pour le rapport du mois
Le piège
Une tâche launchd (comme une tâche cron) ne lit pas ton ~/.zshrc . Les variables que tu y as rangées (TELEGRAM_TOKEN, ANTHROPIC_API_KEY…) n'existent pas pour elle et le programme échoue en disant qu'une clé manque. Elles se déclarent dans le .plist lui-même, sous la clé EnvironmentVariables. Dis-le à Claude en créant la tâche : « mets les variables dont le programme a besoin dans EnvironmentVariables ».
Ne range pas le programme dans Documents, Bureau ou Téléchargements. macOS protège ces dossiers et une tâche launchd pourrait s'y voir refuser l'accès (« Operation not permitted » dans le journal). Un dossier directement dans ton dossier personnel, comme ~/essai-rappel, évite le problème.