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.
la source
Réponses:
De
man launchctl
Le correctif est
la source
chmod 644
?Curieusement, l'utilisation
sudo
était votre problème. En utilisantsudo
, vous n'étiez plus vous-même, vous n'étiez donc pas propriétaire de votre propre fichier. Supprimezsudo
, répétez la commande et elle devrait charger très bien. Désolé pour l'approche philosophique de tout cela.la source
J'ai trouvé la solution.
La commande correcte dans ce cas est
Et pour décharger,
Je ne sais pas pourquoi
launchctl load
nécessite root, mais le chargement / déchargement est de toute façon déconseillé.la source
chmod
&chown
?Ran dans cela aussi, en essayant d'utiliser l'utilisateur, pas root .plist (comme on devrait être capable de le faire)
J'ai été connecté à distance à cette machine alors que je n'étais PAS connecté à la console (sans tête), ce qui semblait être mon problème - au moins, les services gérés par l'utilisateur ont besoin que l'utilisateur soit connecté sur l'écran principal (j'ai fini par le faire connexion via la gestion à distance car il s'agit d'une machine sans tête)
OMI, si vous voulez que cela fonctionne même si vous n'êtes pas personnellement là pour vous connecter, vos options sont:
Connectez-vous automatiquement à votre compte (notez les implications de sécurité, également sans la balise UserName comme indiqué dans l'une des réponses)
Rendez les fichiers root possédés comme indiqué dans les diverses suggestions (redéfinissez l'utilisateur sur le vôtre avec UserName comme vous l'avez déjà)
la source
Voici une idée idiote.
J'ai juste eu la même erreur, également après avoir mis à niveau vers Yosemite. J'ai supposé à tort que cela signifiait une mauvaise propriété / autorisations sur le fichier .plist, alors qu'en fait, pour une raison quelconque, le binaire auquel je faisais référence dans le plist (dans mon cas cassandra), avait perdu son bit exécutable.
chmod + x'ing l'a corrigé.
Ce n'est probablement pas votre problème, mais cela pourrait valoir le coup :)
la source
Retirez la
UserName
clé et la chaîne.Le problème est que la
UserName
clé ne peut être utilisée que si le processus est démarré par root. Il ne peut être démarré en tant que root que si le plist appartient à root. Fondamentalement, le processus est démarré par root et est ensuite soumis à l'utilisateur spécifié. Si vous souhaitez que ce processus s'exécute en tant que vous-même, placez le plist dans votre dossier ~ / Library / LaunchAgents et supprimez la clé UserName.la source
Avez-vous essayé de recharger manuellement un agent disposant des autorisations utilisateur? Je ne comprends pas entièrement pourquoi tout cela est requis, mais je pense que vous devez être attaché à votre domaine d'utilisateurs (auquel il semble que vous ne soyez pas attaché lorsque vous exécutez en tant que root). L'utilisation de ces fonctions pour rattacher a fonctionné pour moi.
Vous utiliseriez ceci comme suit:
Le bsexec vous remet dans votre domaine et vous permet d'ajouter la tâche en tant que lanceur d'utilisateur.
la source