Ho uno script launchd in cui il comando che sto cercando di eseguire è un errore (a quanto pare non è una parola, è ora), lamentando un uso improprio.
L'errore specifico che sto ottenendo è 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'utilizzo 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 semplicemente "Sono uscito con un errore".
So che launchd divide il comando dalle sue opzioni e nella pagina man ti dice di ProgramArguments: "... Nota: molte persone sono confuse da questa chiave. Leggere con precisione execvp (3)! .."
Bene, ho letto execvp (3) e non ne sono più saggio, quindi ti sto chiedendo molto.
Normalmente, eseguendo il comando dal terminale, sarebbe simile a questo:
/Library/Application\ Support/BOINC\ Data/boinccmd --host localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update
Funziona bene.
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 per boinccmd \ escapato, ma non funziona, launchd fugge gli 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 non sembrava funzionare neanche.
Come sempre, sono sicuro che mi manca 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 intendevo per "... Per favore, leggi attentamente! .." commenta :) Ho anche scoperto che dovevo suddividere gli argomenti nelle loro parti componenti. Quando ho avuto tutto questo, tutto ha un fascino. 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>
Una modifica finale da dire per una spiegazione facile da capire sul perché questo dovrebbe essere, vedi la spiegazione di SirPavlova.
~ W