Tengo una secuencia de comandos launchd en la que el comando que estoy intentando ejecutar es un error (aparentemente no es una palabra, ahora lo es), quejándose de un uso incorrecto.
El error específico que recibo es el texto de uso del comando volcado en el registro del sistema. De esto deduzco que la otra información (ruta al comando, tiempo, 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 de comando man le informa sobre Programgguments: "... Tenga en cuenta: esta tecla confunde a muchas personas. Lea atentamente execvp (3)!"
Bueno, leí execvp (3) y no soy consciente de eso, así que te pregunto mucho.
Normalmente, ejecutando el comando desde el terminal se vería así:
/Library/Application\ Support/BOINC\ Data/boinccmd --host localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update
Esto funciona muy bien.
Y así es como lo he dividido en la sección Program / ProgramArguments de mi lista de 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 tuve la ruta a boinccmd \ escape, pero eso no funciona, launchd escapa espacios en la ruta para ti)
He intentado dividir más los argumentos:
<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 parece funcionar.
Como siempre, estoy muy seguro de que me estoy perdiendo algo tan simple.
Gracias.
RESPUESTA:
La primera línea de ProgramArguments debe ser la ruta al programa. Esto es lo que me estaba haciendo tropezar y, de hecho, lo que probablemente significaba el comentario "... Por favor, lea con mucha atención! .." :) También descubrí que tenía que dividir los argumentos en sus partes 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 última edición para una explicación fácil de entender sobre POR QUÉ debe ser esto, vea la explicación de SirPavlova.
~ W