J'ai un script launchd où la commande que j'essaie d'exécuter est en erreur (apparemment ce n'est pas un mot, c'est maintenant), se plaignant d'une mauvaise utilisation.
L'erreur spécifique que j'obtiens est le texte d'utilisation de la commande vidé dans le journal système. J'en déduis que les autres informations (chemin d'accès à la commande, timing, etc.) dans le plist sont analysées correctement, mais pas les options de la commande.
Après l'utilisation de la commande, j'ai une dernière ligne:
18/11/2013 09:30:00.101 com.apple.launchd.peruser.501: (fake.lable.seti[33833]) Exited with code: 1
Mais cela signifie simplement "je suis sorti avec une erreur".
Je sais que launchd sépare la commande de ses options et dans la page de manuel vous parle de ProgramArguments: "... Veuillez noter: beaucoup de gens sont confus par cette clé. Veuillez lire execvp (3) très attentivement! .."
Eh bien, j'ai lu execvp (3) et je ne suis pas plus sage, donc je vous demande beaucoup.
Normalement, en exécutant la commande à partir du terminal, cela ressemblerait à ceci:
/Library/Application\ Support/BOINC\ Data/boinccmd --host localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update
Cela fonctionne un régal.
Et voici comment je l'ai divisé dans la section Program / ProgramArguments de mon plist LaunchAgent:
<key>Program</key>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
<array>
<string>--host localhost</string>
<string>--passwd gobbledygook</string>
<string>--project http://setiathome.berkeley.edu/ update</string>
</array>
(pour mémoire, j'avais à l'origine le chemin vers boinccmd \ échappé, mais cela ne fonctionne pas, launchd échappe les espaces du chemin pour vous)
J'ai essayé de diviser davantage les arguments:
<key>Program</key>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
<array>
<string>--host</string>
<string>localhost</string>
<string>--passwd</string>
<string>gobbledygook</string>
<string>--project</string>
<string>http://setiathome.berkeley.edu/</string>
<string>update</string>
</array>
Mais cela ne semblait pas fonctionner non plus.
Comme toujours, je suis sûr que je manque quelque chose de si simple.
Merci.
RÉPONDRE:
La première ligne de ProgramArguments doit être le chemin d'accès au programme. C'est ce qui me trébuchait et en fait ce que l'on entendait probablement par le commentaire "... Veuillez lire très attentivement! .." :) J'ai également constaté que je devais diviser les arguments en leurs composants. Quand j'avais tout cela en place, tout cela fait un charme. Merci beaucoup.
<key>Program</key>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<key>ProgramArguments</key>
<array>
<string>/Library/Application Support/BOINC Data/boinccmd</string>
<string>--host</string>
<string>localhost</string>
<string>--passwd</string>
<string>gobbledygook</string>
<string>--project</string>
<string>http://setiathome.berkeley.edu/</string>
<string>update</string>
</array>
Une dernière modification à dire pour une explication facile à comprendre pourQUOI cela devrait être, voir l'explication de SirPavlova.
~ W
<string>--host localhost</string>
ne fonctionnera certainement pas . N'oubliez pas que lorsque vous écrivez une ligne de commande dans un shell, il n'a aucune idée de ce qui fait partie d'une option et de ce qu'est un argument normal - il se divise simplement en espaces avant de passer les arguments au programme en cours d'exécution. En outre, il peut être utile d'afficher l'erreur exacte boinccmd
signalée.