Comment utiliser Launchd pour planifier des scripts d'exécution sur Mac

Automatiser des tâches en planifiant des scripts est une capacité puissante sur laquelle de nombreux administrateurs comptent chaque jour. Les utilisateurs réguliers de Mac peuvent également tirer parti de ce pouvoir en utilisant launchd, l’outil préféré d’Apple pour l’automatisation et la gestion des tâches sur macOS. De la planification de tâches simples comme désactiver le Wi-Fi à une heure spécifique, à l’exécution de sauvegardes système complexes, launchd sur Mac peut vous aider à automatiser vos flux de travail, à gagner du temps et à garantir que votre système fonctionne exactement comme vous le souhaitez.
Table des matières
- Qu’est-ce que Launchd ?
- Daemons et Agents
- Écriture de scripts
- Descriptions de tâches
- Chargement des tâches dans launchctl
- Questions fréquentes
Qu’est-ce que Launchd ?
Tout comme un orchestre nécessite un chef d’orchestre pour guider et harmoniser les divers instruments, macOS Ventura, avec sa myriade de processus et de services, s’appuie sur launchd pour garantir que tout joue en parfait concert. En tant que premier processus lancé par le noyau macOS lorsque vous démarrez votre ordinateur, launchd occupe le devant de la scène, orchestrant chaque processus, service et application subséquent, tout comme un chef d’orchestre signalant le début d’une symphonie avec le premier lever de bâton.
Au-delà de son rôle dans l’orchestration du système, launchd peut être utilisé pour planifier des scripts, une série de commandes écrites pour effectuer une tâche spécifique. Cela se fait en utilisant la commande launchctl, qui sert d’interface pour que les utilisateurs communiquent et dirigent le chef d’orchestre qu’est launchd.
Bon à savoir : vous téléchargez des torrents ? Améliorez l’efficacité en téléchargeant des torrents avec Terminal sur votre Mac.
Daemons et Agents
launchd est parfois appelé un daemon, un programme informatique qui s’exécute en tant que processus en arrière-plan et qui n’est généralement pas conçu pour être contrôlé directement par un utilisateur. En ce qui concerne les daemons, launchd est spécial, car c’est le maestro de tous les autres daemons macOS, et il peut décider quand ils démarrent et s’arrêtent. Ces daemons subalternes s’exécutent sous l’utilisateur root, donc ils peuvent faire à peu près n’importe quoi.

Cependant, en tant qu’utilisateur intéressé par la planification des tâches, exécuter des scripts sous l’utilisateur root n’est pas toujours souhaitable ou nécessaire. C’est là que les agents entrent en jeu. Les agents s’exécutent au nom d’un utilisateur connecté, offrant un environnement plus restreint et garantissant que les scripts ou les tâches sont effectués avec les autorisations et les préférences de cet utilisateur spécifique. Par exemple, si vous souhaitez qu’un script s’exécute et modifie des paramètres ou accède à des fichiers dans votre compte, vous utiliseriez un agent.
Astuce : vous rencontrez des problèmes de compatibilité avec certaines de vos applications Mac préférées ? Découvrez comment installer Linux 32 bits sur un ancien Mac.
Écriture de scripts
Pour exécuter des agents ou des daemons via launchd, vous devrez écrire quelques scripts. Le langage de script le plus courant est bash. Si vous souhaitez en savoir plus sur le scripting bash, vous pouvez consulter notre guide pour débutants sur le scripting bash.

Vos scripts launchd peuvent se trouver à deux emplacements différents, selon qu’ils doivent être exécutés en tant qu’agents ou daemons :
- Pour les scripts destinés à être des agents, agissant au nom de l’utilisateur connecté, ils doivent être stockés dans “~/Library/LaunchAgents.”
- Inversement, les scripts destinés à fonctionner comme des daemons, à l’échelle du système indépendamment de l’utilisateur connecté, appartiennent à “ /Library/LaunchDaemons.”
N’oubliez pas que les agents n’ont pas de permissions root, donc ils ne peuvent pas effectuer des tâches nécessitant un accès profond au système. Les daemons, en revanche, s’exécutent avec des permissions root et peuvent gérer des tâches qui affectent l’ensemble du système.
Bon à savoir : vous pouvez obtenir un contrôle plus approfondi sur votre Mac en activant l’utilisateur root, ce qui vous permet d’accéder à l’ensemble de son système de fichiers.
Descriptions de tâches

Les scripts dans launchd sont déclenchés par des définitions de tâches, qui sont des fichiers .plist stockés dans des répertoires spécifiques. Ces fichiers XML donnent un nom à la tâche, spécifient le script qui doit être lancé et indiquent quand le script doit être exécuté. Une fois que vous avez écrit votre script, vous écrirez et chargerez une définition de tâche qui lancera le script au moment approprié. Une définition de tâche ressemble à ceci :
version="1.0"encoding="UTF-8"?>
version="1.0">
>
>Label>
>local.restart>
>Program>
>/Users/user/Scripts/restart.sh>
>RunAtLoad>
/>
>
>Modifiez selon vos besoins, puis mettez-le dans un fichier texte avec l’extension .plist avant de le déposer dans le répertoire correct (voir ci-dessus).
Il y a quelques parties clés dans la description de la tâche :
- Label : le nom de la tâche dans launchd. Doit être unique pour chaque tâche. Ceux-ci sont écrits en notation de domaine inversée, et “local” est un excellent domaine pour les agents privés.
- Program : le chemin complet du script que cette description de tâche lance.
- RunAtLoad : décrit quand le script doit être exécuté. Il y a quelques options différentes ici : - RunAtLoad : exécute dès que la définition de tâche est chargée. Ne s’exécute qu’une seule fois par chargement.
- StartInterval : démarre la tâche toutes les n secondes.
- StartCalendarInterval : exécute la tâche à un moment et une date spécifiques.
Astuce : besoin de plus d’espace pour ces fichiers de script ? Apprenez à vider le cache sur votre Mac pour libérer rapidement de l’espace.
Chargement des tâches dans launchctl

Une fois que vous avez créé vos scripts et enregistré votre agent au bon endroit, vous devrez le charger dans launchctl. Cela se fera automatiquement lors des connexions futures.
Pour voir ce qui s’exécute actuellement dans launchctl, vous pouvez utiliser launchctl list dans le terminal. Cette énorme liste peut être filtrée pour votre script en l’étiquetant avec quelque chose comme ceci :
launchctl list |grep local.restartPour charger un script, ouvrez Terminal et utilisez la commande suivante :
launchctl load ~/Library/LaunchAgents/local.restart.plistPour retirer le script de la file d’attente launchctl, utilisez la commande unload :
launchctl unload ~/Library/LaunchAgents/local.restart.plistCharger une tâche la met dans la file d’attente launchd, et la tâche s’exécutera au moment spécifié dans ses conditions de lancement. Si vous souhaitez exécuter un script immédiatement, peu importe quoi, vous devriez utiliser la commande “start” :
launchctl start local.restartCette commande prend l’étiquette de la tâche et ne fonctionnera que si la tâche a déjà été chargée dans launchctl.
Astuce : devenez un utilisateur avancé de Mac en utilisant Raycast ou Alfred pour lancer rapidement vos applications préférées.
Questions fréquentes
Comment puis-je vérifier si launchd a démarré un script ?
Vous pouvez utiliser la commande launchctl list dans le terminal. Cela affichera toutes les tâches chargées. Pour trouver un script ou une tâche spécifique, utilisez grep, par exemple, launchctl list | grep votre_nom_de_script.
Que faire si launchd utilise trop de ressources système ?
Si launchd consomme des ressources excessives, c’est généralement dû à un script ou une tâche malveillant. Vous devriez examiner les scripts que vous avez ajoutés récemment et les décharger en utilisant launchctl unload /path/to/job.plist.
Quelle est la différence entre cron et launchd ?
Cron et launchd sont tous deux des services de planification, mais ils fonctionnent différemment. Cron est un planificateur de tâches basé sur Unix plus ancien qui exécute des tâches à des heures ou des intervalles fixes définis dans un fichier crontab. Launchd est le système plus récent d’Apple pour macOS qui peut démarrer des tâches en fonction de divers déclencheurs - pas seulement le temps.
Puis-je utiliser d’autres langages de script en plus de bash avec launchd ?
Launchd peut exécuter n’importe quel script qui peut être exécuté depuis le terminal. Cela inclut des scripts écrits en Python, Perl, Ruby et d’autres langages.
Crédit image : Pexels. Toutes les captures d’écran par David Morelo.