15 votes

Comment enregistrer un agent avec launchd

Je n'arrive pas à programmer un lancement périodique avec launchctl / launchd sur OS X (Leopard). En gros, je n'arrive pas à trouver une liste d'instructions étape par étape sur le web et l'approche intuitive ne fonctionne pas.

Le site sync.plist fichier :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>net.madrat.utils.sync</string>
        <key>Program</key>
        <string>rsync</string>
        <key>ProgramArguments</key>
        <array>
            <string>-ar</string>
            <string>/path/to/folder/</string>
            <string>/path/to/backup/</string>
        </array>
        <key>StartInterval</key>
        <integer>7200</integer>
    </dict>
</plist>

J'ai mis ce script à l'intérieur du chemin d'accès. ~/Library/LaunchAgents .

Ensuite, j'ai enregistré le script en utilisant

launchctl load ~/Library/LaunchAgents/sync.plist

Enfin, pour vérifier que cela fonctionne, j'ai a commencé le travail :

 launchctl start net.madrat.utils.sync

- Il ne s'est rien passé. L'exécution manuelle de la rsync dans le terminal donne le résultat attendu.

Je suis pratiquement sûr que la tâche a été enregistrée correctement car si j'essaie de lancer une tâche inexistante, j'obtiens un message d'erreur (que je n'a pas obtenu dans la commande ci-dessus).

Qu'est-ce que j'ai fait de mal ?

0voto

Norman Gray Points 1206

Vous avez un élément erroné dans votre fichier .plist, et un élément douteux (chacun de ces points a été abordé dans les réponses précédentes ; je les rassemble ici).

Vous feriez mieux d'écrire :

<key>ProgramArguments</key>
<array>
  <string>/usr/local/bin/rsync</string>
  <string>-ar</string>
  <string>/path/to/folder/</string>
  <string>/path/to/backup/</string>
</array>

Le premier argument dans le ProgramArguments array est le programme à exécuter - vous l'avez omis. Si le Program est omise, il s'agit par défaut du premier argument de l'option ProgramArguments il est probablement sage de ne le spécifier qu'une seule fois.

Parce que vous avez omis ce premier argument, votre fichier .plist se ont invoqué rsync (en étant nommés dans la section Program ), mais le "premier argument" de rsync aurait été /path/to/folder et non -ar (le programme en cours d'exécution aura été très brièvement visible en ps avant qu'il ne se termine par une erreur, mais nommée en tant que -ar qui est le contenu de l'argument zéro).

Tu ne le fais pas. ont pour inclure le chemin d'accès à rsync mais dans ce genre de contexte, il est probablement prudent de le faire, afin d'éviter d'avoir à s'appuyer sur l'approche de la PATH étant réglée de manière appropriée.

La documentation à ce sujet se trouve dans launchd.plist(5) . Notez que cette page de manuel souligne que la valeur de l'option ProgramArguments est transmise à execvp(3) . C'est le execvp qui explique la recherche de PATH.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X