Comment utiliser Launchd pour planifier l'exécution de scripts sur Mac

Automatisez des tâches avec launchd sur Mac. Planifiez des scripts pour gagner du temps et personnaliser le fonctionnement de votre système. Découvrez comment utiliser launchd pour automatiser vos flux de travail sur macOS.

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 exploiter cette puissance en utilisant launchd, l'outil privilégié par Apple pour l'automatisation des tâches et la gestion sur macOS. De la planification de tâches simples comme la désactivation du Wi-Fi à une heure précise, à 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.

Qu'est-ce que Launchd ?

Tout comme un orchestre a besoin d'un chef d'orchestre pour guider et harmoniser les divers instruments, macOS Ventura, avec ses nombreux processus et services, s'appuie sur launchd pour s'assurer que tout joue en parfait concert. En tant que premier processus lancé par le noyau de macOS lorsque vous démarrez votre ordinateur, launchd prend la vedette, orchestrant chaque processus, service et application ultérieurs, tout comme un chef d'orchestre signalant le début d'une symphonie avec le premier geste de la baguette.

Au-delà de son rôle dans l'orchestration 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 à l'aide de la commande launchctl, qui sert d'interface aux utilisateurs pour communiquer et diriger le chef d'orchestre qu'est launchd.

Démons et agents

launchd est parfois appelé un démon, un programme informatique qui s'exécute en arrière-plan et n'est généralement pas conçu pour être directement contrôlé par un utilisateur. En ce qui concerne les démons, launchd est spécial, car il est le maestro de tous les autres démons macOS, et il peut décider quand ils démarrent et s'arrêtent. Ces démons subalternes s'exécutent sous l'utilisateur root, de sorte qu'ils peuvent faire presque 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 exécutés avec les autorisations et les préférences de cet utilisateur spécifique. Par exemple, si vous souhaitez exécuter un script qui modifie des paramètres ou accède à des fichiers dans votre compte, vous utiliseriez un agent.

Rédaction de scripts

Pour exécuter des agents ou des démons 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 du débutant sur le scripting bash.

Vos scripts launchd peuvent être stockés à deux endroits différents, selon qu'ils sont destinés à être exécutés en tant qu'agents ou démons :

  • 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 en tant que démons, indépendamment de l'utilisateur connecté, doivent être placés dans "/Library/LaunchDaemons".

Remarque : les agents n'ont pas les autorisations root, ils ne peuvent donc pas effectuer des tâches qui nécessitent un accès au système en profondeur. En revanche, les démons s'exécutent avec les autorisations root et peuvent gérer des tâches qui affectent l'ensemble du système.

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 lance le script au moment approprié. Une définition de tâche ressemble à ceci :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>local.restart</string>
  <key>Program</key>
  <string>/Users/user/Scripts/restart.sh</string>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Modifiez selon les besoins, puis mettez-le dans un fichier texte avec le format HTML.

.plist extension avant de le déposer dans le répertoire correct (voir ci-dessus).

Il y a quelques éléments clés dans la description du poste :

  • Étiquette : le nom du poste dans launchd. Doit être unique pour chaque poste. Ils sont écrits en notation de domaine inversé, et "local" est un excellent domaine pour les agents privés.
  • Programme : le chemin complet du script que cette description de poste lance.
  • RunAtLoad : décrit quand le script doit être exécuté. Il existe quelques options différentes ici :
    • RunAtLoad : s'exécute dès que la définition du poste est chargée. S'exécute une seule fois par chargement.
    • StartInterval : démarre le poste toutes les n secondes.
    • StartCalendarInterval : exécute le poste à un moment et une date spécifiques.

Chargement des postes 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 ultérieures.

Pour voir ce qui est actuellement en cours d'exécution dans lauchctl, vous pouvez utiliser launchctl list dans le terminal. Cette liste géante peut être filtrée pour votre script en lui attribuant une étiquette comme suit :

launchctl list | grep local.restart

Pour charger un script, ouvrez le Terminal et utilisez la commande suivante :

launchctl load ~/Library/LaunchAgents/local.restart.plist

Pour supprimer le script de la file d'attente de launchctl, utilisez la commande unload :

launchctl unload ~/Library/LaunchAgents/local.restart.plist

Charger un poste le place dans la file d'attente de launchd, et le poste s'exécutera à l'heure spécifiée dans ses conditions de lancement. Si vous voulez exécuter un script immédiatement, peu importe quoi, vous devriez utiliser la commande "start" :

launchctl start local.restart

Cette commande utilise l'étiquette du poste et ne fonctionnera que si le poste a déjà été chargé dans launchctl.

Foire aux questions

Comment puis-je vérifier si launchd a lancé un script ?

Vous pouvez utiliser la commande launchctl list dans le terminal. Cela affiche tous les postes chargés. Pour trouver un script ou un poste spécifique, utilisez grep, par exemple launchctl list | grep nom_de_votre_script.

Que faire si launchd utilise trop de ressources système ?

Si launchd consomme trop de ressources, c'est généralement dû à un script ou un poste mal comporté. Vous devriez revoir les scripts que vous avez récemment ajoutés et les décharger en utilisant launchctl unload /chemin/vers/le/poste.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 ancien planificateur de tâches basé sur Unix qui exécute des tâches à des heures fixes ou à des intervalles définis dans un fichier crontab. Launchd est le nouveau système 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 que Bash avec launchd ?

Launchd peut exécuter n'importe quel script qui peut être exécuté depuis le terminal. Cela inclut les scripts écrits en Python, Perl, Ruby et d'autres langages.

Index
  1. Qu'est-ce que Launchd ?
  2. Démons et agents
  3. Rédaction de scripts
  4. Descriptions de tâches
  5. Chargement des postes dans launchctl
  6. Foire aux questions
    1. Comment puis-je vérifier si launchd a lancé un script ?
    2. Que faire si launchd utilise trop de ressources système ?
    3. Quelle est la différence entre cron et launchd ?
    4. Puis-je utiliser d'autres langages de script que Bash avec launchd ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Go up