У меня есть скрипт launchd, в котором команда, которую я пытаюсь выполнить, содержит ошибку (очевидно, это не слово, это сейчас), жалуясь на неправильное использование.
Конкретная ошибка, которую я получаю, - это текст использования команды, выгруженный в системный журнал. Из этого я делаю вывод, что другая информация (путь к команде, время и т. Д.) В plist анализируется правильно, но не параметры команды.
После использования команды у меня есть последняя строка:
18/11/2013 09:30:00.101 com.apple.launchd.peruser.501: (fake.lable.seti[33833]) Exited with code: 1
Но это просто означает, что «я вышел с ошибкой».
Я знаю, что launchd разбивает команду по ее параметрам и на странице руководства рассказывает о ProgramArguments: «... Обратите внимание: многие люди смущены этим ключом. Пожалуйста, внимательно прочитайте execvp (3)! ..»
Ну, я прочитал execvp (3), и я не мудрый, поэтому я вас очень прошу.
Обычно при запуске команды из терминала это выглядит так:
/Library/Application\ Support/BOINC\ Data/boinccmd --host localhost --passwd gobbledygook --project http://setiathome.berkeley.edu/ update
Это работает удовольствие.
И вот как я разделил это в разделе Program / ProgramArguments моего списка 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>
(для протокола, у меня изначально был путь к boinccmd \ escaped, но это не работает, launchd избегает пробелов в пути для вас)
Я попытался разделить аргументы дальше:
<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>
Но это тоже не сработало.
Как всегда, я уверен, что мне не хватает чего-то такого простого.
Благодарю.
ОТВЕТ:
Первая строка ProgramArguments должна быть путем к программе. Это то, что меня сбило с толку, и, действительно, то, что, вероятно, подразумевалось под комментарием «... Пожалуйста, прочитайте очень внимательно! ..» :) Я также обнаружил, что мне пришлось разделить аргументы на их составные части. Когда у меня все это было на месте, все это создает очарование. Большое спасибо.
<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>
Окончательное редактирование, чтобы сказать для легкого для понимания объяснения ПОЧЕМУ это должно быть, см. Объяснение сэра Павлова.
~ W
<string>--host localhost</string>
определенно не сработает. Помните, что когда вы пишете командную строку в оболочку, она не имеет представления о том, что является частью опции и что является обычным аргументом - она просто разделяется на пробелы перед передачей аргументов в выполняемую программу. Кроме того, это могло бы помочь, если бы вы показывали точную ошибку, которая boinccmd
сообщает.