J'ai un démon launchd placé ~/Library/LaunchAgents
qui a bien fonctionné dans Mavericks. Mais cela ne commencera pas dans la version bêta publique de Yosemite. Le plist du démon est comme ceci (mon nom d'utilisateur est darksair
avec l'UID 501)
<?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>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>KeepAlive</key>
<false/>
<key>StartInterval</key>
<integer>300</integer>
<key>LaunchOnlyOnce</key>
<false/>
<key>UserName</key>
<string>darksair</string>
<key>ProcessType</key>
<string>Standard</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Fondamentalement, il est censé s'exécuter ~/bin/retrmail.py
toutes les 5 minutes.
Je remarque que dans Yosemite launchd est mis à niveau vers 2.0, et launchctl a de nouvelles commandes. j'ai essayé
sudo launchctl kickstart user/501/org.darksair.retrmail
et il a dit
Could not find service "org.darksair.retrmail" in domain for uid: 501
J'ai aussi essayé la vieille école
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
et il a dit
/Users/darksair/Library/LaunchAgents/retrmail.plist: Path had bad ownership/permissions
Le dossier est la propriété de moi et du groupe du personnel. J'ai essayé les autorisations 644 et 600 avec la même erreur.
Alors, quelqu'un sait-il comment lancer correctement un démon launchd dans Yosemite?
MISE À JOUR: On dirait que mon fichier d'agent de lancement doit appartenir à root:wheel
. Après avoir chown, j'ai essayé
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
et il n'a émis aucune erreur. Et je pense que mon démon fonctionne correctement. Je vais laisser cette question ouverte car je me souviens que le document launchd indique clairement que le fichier de l'agent de lancement peut appartenir à l'utilisateur exécutant le démon.
UPDATE2: Non, il ne fonctionnait pas correctement. Il n'a été exécuté qu'une seule fois, mais pas à nouveau, comme s'il était déchargé.
MISE À JOUR3: J'ai mis à niveau vers la version 3 publique de Yosemite et j'ai changé mon agent pour celui-ci
<?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>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>UserName</key>
<string>darksair</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
J'ai rechargé cet agent, et je pense que maintenant il fonctionne correctement. Je laisse toujours cette question ouverte parce que je ne sais pas ce qui ne va pas avec mon plist précédent.
En conclusion, ce que j'ai trouvé, c'est que je dois changer le propriétaire du plist root:wheel
pour le charger.