Eu tenho um script launchd em que o comando que estou tentando executar está com erro (aparentemente isso não é uma palavra, é agora), reclamando de uso inadequado.
O erro específico que estou recebendo é o texto de uso do comando despejado no log do sistema. A partir disso, deduzo que as outras informações (caminho para o comando, tempo etc.) no plist estão sendo analisadas corretamente, mas não as opções do comando.
Após o uso do comando, tenho uma última linha:
18/11/2013 09:30:00.101 com.apple.launchd.peruser.501: (fake.lable.seti[33833]) Exited with code: 1
Mas isso significa apenas "Saí com um erro".
Eu sei que o launchd divide o comando de suas opções e, na página de manual, fala sobre os ProgramArguments: "... Observe: muitas pessoas ficam confusas com essa chave. Por favor, leia o execvp (3) com muito cuidado! .."
Bem, eu li o execvp (3) e não sou o mais sábio, então estou pedindo muito a você.
Normalmente, executando o comando a partir do terminal, ficaria assim:
/Library/Application\ Support/BOINC\ Data/boinccmd --host localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update
Isso funciona um prazer.
E foi assim que eu o dividi na seção Program / ProgramArguments da minha lista do 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 constar, eu originalmente tinha o caminho para boinccmd \ escapou, mas isso não funciona, o launchd escapa espaços no caminho para você)
Eu tentei dividir os argumentos ainda mais:
<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>
Mas isso também não parecia funcionar.
Como sempre, tenho certeza de que estou perdendo algo tão simples.
Obrigado.
RESPONDA:
A primeira linha de ProgramArguments precisa ser o caminho para o programa. Isso é o que estava me atrapalhando e, na verdade, o que provavelmente significava o comentário "... Por favor, leia com muito cuidado! .." :) Eu também descobri que precisava dividir os argumentos em suas partes componentes. Quando eu tinha tudo isso no lugar, a coisa toda funciona como um encanto. Muito obrigado.
<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>
Uma edição final para dizer uma explicação fácil de entender sobre POR QUE deveria ser, consulte a explicação de SirPavlova.
~ W
<string>--host localhost</string>
definitivamente não funcionará. Lembre-se, quando você escreve uma linha de comando em um shell, ela não faz ideia do que faz parte de uma opção e do que é um argumento regular - apenas divide os espaços antes de passar os argumentos para o programa que está sendo executado. Além disso, pode ajudar se você mostrar o erro exato que boinccmd
está relatando.