Tengo un script de launchd donde el comando que estoy tratando de ejecutar es un error (aparentemente eso no es una palabra, ahora lo es), quejándose de un uso incorrecto.
El error específico que obtengo es el texto de uso del comando volcado al registro del sistema. De esto deduzco que la otra información (ruta al comando, sincronización, etc.) en el plist se está analizando correctamente, pero no las opciones del comando.
Después del uso del comando tengo una última línea:
18/11/2013 09:30:00.101 com.apple.launchd.peruser.501: (fake.lable.seti[33833]) Exited with code: 1
Pero eso solo significa "Salí con un error".
Sé que launchd divide el comando de sus opciones y en la página del manual le informa sobre los argumentos del programa: "... Tenga en cuenta: esta clave confunde a muchas personas. ¡Lea execvp (3) con mucho cuidado! .."
Bueno, leí execvp (3) y no soy el más sabio, así que te pregunto mucho.
Normalmente, ejecutando el comando desde la terminal se vería así:
/Library/Application\ Support/BOINC\ Data/boinccmd --host localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update
Esto funciona de maravilla.
Y así es como lo he dividido en la sección Programa / Argumentos de programa de mi pliego 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>
(para el registro, originalmente tenía la ruta a boinccmd \ escapado, pero eso no funciona, launchd escapa espacios en la ruta para usted)
He intentado dividir los argumentos aún más:
<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>
Pero eso tampoco parecía funcionar.
Como siempre, estoy muy seguro de que me estoy perdiendo algo tan simple.
Gracias.
RESPONDER:
La primera línea de argumentos del programa debe ser el camino hacia el programa. Esto es lo que me estaba haciendo tropezar y, de hecho, lo que probablemente significaba el comentario "... ¡Lee con mucho cuidado! .." :) También descubrí que tenía que dividir los argumentos en sus componentes. Cuando tuve todo eso en su lugar, todo funciona de maravilla. Muchas gracias.
<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>
Una edición final para decir una explicación fácil de entender sobre POR QUÉ esto debería ser, vea la explicación de SirPavlova.
~ W
<string>--host localhost</string>
definitivamente no funcionará. Recuerde, cuando escribe una línea de comando en un shell, no tiene idea de qué es parte de una opción y qué es un argumento regular: simplemente se divide en espacios antes de pasar los argumentos al programa que se está ejecutando. Además, podría ayudar si mostrara el error exacto que boinccmd
informa.