2 votes

Comment faire un LaunchAgent avec StartCalendarInterval

Je veux commencer à remplacer les crontabs par des LaunchAgents. Ma première tentative ne fonctionne pas.

<?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>com.nocturnal.mcworldsBackup</string>
    <key>ProgramArguments</key>
    <array>
            <string>~/bin/mcworldsBackup.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
            <key>Hour</key>
            <integer>4</integer>
            <key>Minute</key>
            <integer>30</integer>
    </dict>
</dict>
</plist>

Le script mcworldsBackup.sh fonctionne bien en mode autonome. Je lui ai fait enregistrer un horodatage dans un fichier à chaque fois qu'il s'exécute et jusqu'à présent launchd ne l'a pas exécuté une seule fois.

J'ai vérifié et réparé les permissions de mon disque en utilisant DiskUtility, le plist est dans ~/Bibliothèque/LaunchAgents/com.nocturnal.mcworldsBackup.plist avec les permissions 0644, comme tous les autres fichiers .plist déjà présents. Ils sont tous détenus par me:staff.

Si je cherche mcworldsBackup.sh dans /var/log/*, je ne trouve rien, aucun indice sur la raison pour laquelle il n'est pas exécuté.

Après avoir créé la plist, je me suis déconnecté et reconnecté, j'ai également redémarré l'ordinateur plusieurs fois alors que la documentation indique qu'il suffit de se connecter.

3voto

Nathan Grigg Points 1201

Vous devez spécifier le chemin complet dans ProgramArguments. Les éléments que votre shell développe normalement, tels que ~ y * ne sont pas étendus par launchd .

Après avoir effectué ces modifications, ce LaunchAgent a fonctionné pour moi.

Vous avez dit avoir effectué ces modifications, mais cela n'a pas réglé le problème. Il est possible que vous n'ayez pas rechargé le LaunchAgent après avoir effectué les modifications.

Dépannage des LaunchAgents

Vous pouvez vérifier si votre LaunchAgent est actuellement chargé en exécutant

launchctl list | grep com.nocturnal.mcworldsBackup

S'il n'est pas en cours d'exécution, vous pouvez le charger en utilisant

launchctl load ~/Library/LaunchAgents/com.nocturnal.mcworldsBackup.plist

Si vous apportez des changements au fichier plist, vous devrez le décharger en utilisant

luanchctl unload ~/Library/LaunchAgents/com.nocturnal.mcworldsBackup.plist

Vous devrez ensuite le charger à nouveau, en utilisant la commande ci-dessus.

Si vous voulez forcer l'agent de lancement à démarrer maintenant, au lieu d'attendre jusqu'à 16h30, vous pouvez lancer l'opération suivante

launchctl start com.nocturnal.mcworldsBackup

Vous pouvez ensuite l'énumérer en utilisant

launchctl list | grep com.nocturnal.mcworldsBackup

La première colonne du résultat est le PID du processus, s'il est en cours d'exécution. La deuxième colonne est le code de sortie renvoyé la dernière fois qu'il a été exécuté. Utilisez-le pour vérifier s'il s'est exécuté correctement. Si ce n'est pas le cas, le message d'erreur est écrit dans le fichier /var/log/system.log .

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