3 votes

Configurer launchd

J'ai une plist launchd dans ~/Library/LaunchAgents conçu pour exécuter un script situé à ~/writout.sh tous les jours à 10h30 :

<?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.jackson.testwrite.plist</string>
    <key>Program</key>
    <string>/Users/jacksonkearl/writeout.sh</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>10</integer>
        <key>Minute</key>
        <integer>30</integer>
    </dict>
</dict>
</plist>

Le script est :

#!/bin/bash
echo "it works" >> log.txt

Cependant, rien n'est écrit au moment voulu.

Y a-t-il des mesures à prendre pour avertir launchd de l'arrivée d'un nouvel agent ? Ou comment faire pour que le processus démarre ?

6voto

Oskar Points 1242

Pour déboguer ce problème, vous devez activer la redirection.

<key>StandardErrorPath</key>
<string>/tmp/local.job.err</string>
<key>StandardOutPath</key>
<string>/tmp/local.job.out</string>

J'ai également placé ma version de votre script dans /usr/local/bin et s'est assuré qu'il était exécutable avec chmod a+x

L'erreur que j'obtiens est la suivante :

/usr/local/bin/writeout.sh: line 3: log.txt: Permission denied

Vous pouvez donc envoyer votre echo à la commande $TMPDIR ou à un autre endroit où il est possible d'écrire. Il semble que le chemin par défaut pour launchd n'est pas un fichier sur lequel un utilisateur peut écrire (et probablement pour une bonne raison).

Mais faire launchd/launchctl à la main est difficile. Je recommande fortement d'utiliser un outil comme LaunchControl o Lingon . Ils fournissent l'aide et l'automatisation qui me permettent de mieux maîtriser ces scripts.

En utilisant Launch Control - il m'a permis de recréer rapidement votre travail, a fourni toutes sortes de conseils utiles et, surtout, a su suggérer une redirection pour déboguer la condition de sortie / d'erreur script.

enter image description here

En un clic, il a ajouté les lignes ci-dessus à mon fichier plist et m'a proposé de le sauvegarder et de recharger le travail pour moi.

3voto

SJT Points 351

Vous devez charger l'agent de lancement dans launchd.

  1. Terminal ouvert
  2. Type cd ~/Library/LaunchAgents
  3. Type launchctl load -w local.jackson.testwrite.plist (en supposant que ce soit le nom de votre fichier plist)

Cela chargera et activera de manière persistante votre plist. Vous pouvez vérifier qu'elle est chargée avec launchctl list

3voto

klanomath Points 63400

Vous avez plusieurs erreurs dans votre fichier plist :

<key>Label</key>
<string>local.jackson.testwrite.plist</string>

devient

<key>Label</key>
<string>local.jackson.testwrite</string>

et il manque à la liste de contrôle un

</plist>

à la fin. La liste de contrôle devrait finalement ressembler à 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.jackson.testwrite</string>
    <key>Program</key>
    <string>/Users/jacksonkearl/writeout.sh</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>10</integer>
        <key>Minute</key>
        <integer>30</integer>
    </dict>
</dict>
</plist>

Pour charger le LaunchAgent, entrez :

launchctl load /Users/jacksonkearl/Library/LaunchAgents/local.jackson.testwrite.plist

Pour charger l'agent de lancement en permanence, entrez

launchctl load -w /Users/jacksonkearl/Library/LaunchAgents/local.jackson.testwrite.plist

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X