Что не так с моим конфигом launchctl?

15

Я пытаюсь автоматически запустить SickBeard при входе

python /Applications/Sick-Beard/Sickbeard.py

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.sickbeard.sickbeard</string>
  <key>ProgramArguments</key>
  <array>
       <string>/usr/bin/python</string>
       <string>/Applications/Sick-Beard/SickBeard.py</string>
       <string>-q</string>
       <string>-d</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Когда я бегу, launchctl com.sickbeard.sickbeard.plistэто дает мне сообщение:

launchctl load com.sickbeard.sickbeard.plist launchctl: plist не был возвращен для: com.sickbeard.sickbeard.plist launchctl: plist не был возвращен для: com.sickbeard.sickbeard.plist ничего не найдено для загрузки

Жоао Коста
источник
Я предполагаю, что вы имели в виду "launchctl load com.sickbeard.sickbeard.plist" в командной строке? В противном случае вы получите совершенно другую ошибку ;-)
binarybob

Ответы:

37

Я предполагаю, что пути к скрипту Python и его параметры действительны, в противном случае вы, скорее всего, увидите ошибки в консоли.

В последний раз я видел эту ошибку, потому что в листе были ложные символы, например, лишние пробелы, вызывающие синтаксические ошибки и, следовательно, невозможность загрузки. Если вы запустите plutil -lintсвой plist, это проверит синтаксис для вас, а также легко сообщит строку, в которой произошла ошибка.

plutil -lint com.sickbeard.sickbeard.plist

Если это не поможет, то (OSX) Как запустить SickBeard при входе в систему или загрузиться в потоке OSX на форумах sickbeard, немного отличается от вашего (с помощью sickbeard, /usr/localа не с /Applications- так что это может быть проблема с разрешениями) и также некоторые люди с, казалось бы, той же проблемой, что и вы

binarybob
источник
2
Спасибо за помощь. Кажется, что копирование и вставка принесли дополнительный символ, который был скрыт. Я перепечатал весь XML с помощью nano, и он отлично работал.
Жоао Коста
2
Спасибо, никогда не знал об этом plutil -lintраньше. Очень удобно!
robmathers
Только что нашел эту публикацию, но проверка вывода Консоли также помогает с отладкой.
Wing Tang Wong
2

Как я обнаружил, сложный путь, вы должны выполнить команду, используя, sudoа также передавая полный путь к .plistфайлу следующим образом (в вашем случае):

sudo launchctl load /Library/LaunchDaemons/com.sickbeard.sickbeard.plist

Путь может быть другим для вас, но вы должны найти файл, чтобы узнать его местоположение и передать его, как я цитировал launchctlкоманду.

Джонни
источник
2

Сообщение nothing found to loadиногда означает, что конфиг переопределяется другим конфигом. Вы форсируете загрузку, используя опцию "-w" при использовании launchctl load or unload.

Если вам нужно принудительно загрузить или выгрузить файл plist, это означает, что у вас есть конфигурация, которая переопределяет plist. Это переопределение создается, когда вы используете "-w", иначе переопределение не будет добавлено в файл переопределений. Чтобы предотвратить это, отредактируйте файл ниже, найдите ярлык задания, для которого вы хотите удалить переопределение, удалите необходимые строки:

pico /var/db/launchd.db/com.apple.launchd/overrides.plist

Например, удалите эту строку

<key>com.mydomain.myjob</key>
<dict>
        <key>Disabled</key>
        <true/>
</dict>

тогда вы можете использовать: launchctl load or unload /Library/LaunchDaemons/com.mydomain.myjob.plistбез необходимости "-w" или "-F", вы не должны иметь сообщениеnothing found to load

Сильвен Райе
источник
1

Возможно, вы захотите добавить флаг -F, чтобы принудительно launchctlзагрузить .plist. Также убедитесь, что .plist находится в launchctlпоиске путей . Если ваш .plist находится где-то еще, вы также можете добавить флаг -D и указать домен. Из справочной страницы:

-D домен
Искать файлы plist (5), оканчивающиеся на * .plist в указанном домене. Допустимые домены включают «системный», «локальный», «сетевой» и «все». При предоставлении типа сеанса для использования доступен дополнительный домен, который называется «пользователь». Например, без указания типа сеанса «-D система» будет загружаться из файлов списка свойств из / System / Library / LaunchDaemons. При передаче типа сеанса он будет загружаться из / System / Library / LaunchAgents.

Удостоверьтесь, что вы тщательно изучили всю информацию, содержащуюся на странице руководства - вы действительно можете испортить ситуацию, если ваш вызов не настроен должным образом.

soxman
источник