Ho uno script launchd in cui il comando che sto cercando di eseguire è errato (apparentemente non è una parola, lo è ora), lamentandosi di un uso improprio.
L'errore specifico che sto ricevendo è il testo di utilizzo del comando scaricato nel registro di sistema. Da ciò deduco che le altre informazioni (percorso del comando, tempistica ecc.) Nel plist vengono analizzate correttamente, ma non le opzioni del comando.
Dopo l'uso del comando ho un'ultima riga:
18/11/2013 09:30:00.101 com.apple.launchd.peruser.501: (fake.lable.seti[33833]) Exited with code: 1
Ma questo significa solo "Sono uscito con un errore".
So che launchd divide il comando dalle sue opzioni e nella pagina man ti dice ProgramArguments: "... Nota: molte persone sono confuse da questa chiave. Per favore leggi execvp (3) molto attentamente! .."
Beh, ho letto execvp (3) e non sono il più saggio, quindi ti sto chiedendo molto.
Normalmente, eseguendo il comando dal terminale sarebbe simile al seguente:
/Library/Application\ Support/BOINC\ Data/boinccmd --host localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update
Questo funziona a meraviglia.
Ed è così che l'ho diviso nella sezione Program / ProgramArguments del mio 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>
(per la cronaca, originariamente avevo il percorso di boinccmd \ scappato, ma che non funziona, launchd sfugge agli spazi nel percorso per te)
Ho provato a suddividere ulteriormente gli argomenti:
<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>
Ma neanche quello sembrava funzionare.
Come sempre, sono molto sicuro che mi manchi qualcosa di così semplice.
Grazie.
RISPOSTA:
La prima riga di ProgramArguments deve essere il percorso del programma. Questo è ciò che mi ha fatto inciampare e, in effetti, ciò che probabilmente intendeva con il commento "... Per favore leggi molto attentamente! .." :) Ho anche scoperto che dovevo dividere gli argomenti nelle loro parti componenti. Quando avevo tutto questo a posto, tutto funzionava a meraviglia. Grazie mille.
<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>
Un'ultima modifica da dire per una spiegazione di facile comprensione del PERCHÉ dovrebbe essere, vedi la spiegazione di SirPavlova.
~ W
<string>--host localhost</string>
sicuramente non funzionerà. Ricorda, quando scrivi una riga di comando su una shell, non ha idea di cosa faccia parte di un'opzione e di cosa sia un argomento regolare: si divide solo negli spazi prima di passare gli argomenti al programma in esecuzione. Inoltre, potrebbe essere utile mostrare l'errore esatto che boinccmd
viene segnalato.