web-dev-qa-db-fra.com

Comment enregistrer un agent avec launchd

Je suis incapable de planifier un lancement périodique avec launchctl/launchd sur OS X (léopard). Fondamentalement, je ne peux pas trouver une liste étape par étape des instructions sur le Web et que l'approche intuitive ne fonctionne pas.

Les sync.plist déposer:

<?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 ~/Library/LaunchAgents.

Ensuite, j'ai enregistré le script utilisant

launchctl load ~/Library/LaunchAgents/sync.plist

Enfin, pour tester que cela fonctionne, je démarré le travail:

 launchctl start net.madrat.utils.sync

- Rien ne s'est passé. Exécution manuelle La commande rsync dans le terminal donne le résultat attendu.

Je suis assez sûr que le travail a été enregistré correctement parce que si j'essaie de démarrer un travail non existant, je reçois un message d'erreur (lequel i non Entrez la commande ci-dessus).

Qu'ai-je fait de mal?

14
Konrad Rudolph

lingon est un bon outil d'interface graphique pour gérer le lancement. Le projet semble être non pris en charge maintenant ... mais cela fonctionne toujours sur 10.5.x.

Mais à votre problème spécifique ... Avez-vous essayé

Sudo launchctl list 

Cela vous dira si le .plist est en train de tirer correctement. Ça retournera 1 si le démon n'est pas lauching, et un '0' si cela réussit. Peut-être cherchez cela.

Chaque fois que je vois un "1", c'est généralement parce que j'ai mis le script au mauvais endroit, a créé une faute de frappe ou avoir défini des autorisations incorrectivement.

Aussi .... Redémarrez souvent .. j'ai vu

launchctl start

ne pas être efficace où un redémarrage était ..

En outre, en regardant votre question plus proche ... Pourquoi ne pas simplement mettre ce code RSYNC dans un script Bash ... et le coller à /usr/bin/..... alors vous pourriez juste chmod+x Ce fichier ... et simplifiez votre .plist à tirer ce script quand vous le souhaitez ....

5
CaseyIT

essayez ceci, mes scripts fonctionnent sans utiliser la partie du programme, Just Programs Args ...

remplacer

    <key>Program</key>
    <string>rsync</string>
    <key>ProgramArguments</key>
    <array>
        <string>-ar</string>
        <string>/path/to/folder/</string>
        <string>/path/to/backup/</string>
    </array>

avec

    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>rsync</string>
        <string>-ar</string>
        <string>/path/to/folder/</string>
        <string>/path/to/backup/</string>
    </array>
0
Becky