Я столкнулся с подобными проблемами сегодня.
Просто выгрузите сервис и загрузите его снова, чтобы File exists
решить проблему.
Похоже, что каждый раз, когда вы обновляете файл plist, вам придется это делать.
Почему мой файл конфигурации plist не загружается как сервис, использующий launchctl?
Я использую OSX Yosemite, и я прочитал этот прекрасный учебник по использованию launchctl http://nathangrigg.net/2012/07/schedule-jobs-using-launchd/
Я создал правильный файл .plist с конфигурацией сервиса (я знаю, что это правильно, потому что это почти точная копия рабочего файла конфигурации plist, который я создал несколько лет назад). Я печатаю в
launchctl load ~/Library/LaunchAgents/com.apple.myservice.plist
и получить в ответ
~/Library/LaunchAgents/com.apple.myservice.plist: File exists
Это не очень описательно, но я иду и набираю
launchctl start com.apple.myservice
и нет выхода, и ничего не происходит. Я также пытался использовать
launchctl enable ~/Library/LaunchAgents/com.apple.myservice.plist
и я просто получаю
Usage: launchctl enable <service-target>
в ответ.
Может кто-нибудь, пожалуйста, ответьте с правильным синтаксисом для загрузки службы запуска на OSX Yosemite?
Я столкнулся с подобными проблемами сегодня.
Просто выгрузите сервис и загрузите его снова, чтобы File exists
решить проблему.
Похоже, что каждый раз, когда вы обновляете файл plist, вам придется это делать.
launchd
может легко попасть в "странные" состояния.
load
означает прочитать конфигурационный файл и, возможно, запланировать запуск.unload
означает stop
и отменяет планирование конфигурационного файлаstart
запустит сервис (игнорируя расписание, я считаю)stop
остановит службу (опять же, игнорируя расписание)Обычно, если вы хотите «перезапустить» его, вы выгружаете и перезагружаете конфигурацию следующим образом:
launchctl unload -w ~/Library/LaunchAgents/com.apple.myservice.plist launchctl load -w ~/Library/LaunchAgents/com.apple.myservice.plist
-w
Означает «запись», что означает, что изменение затронет перезагружается (загрузит каждый вход или загрузку ... или не будет загружаться когда - либо снова при входе или загрузке).
Если это служба системного уровня ( /Library/LaunchDaemons
или /Library/LaunchAgents
вам может понадобиться сделать это sudo
(и если вы сделали это без sudo по ошибке, вам может потребоваться выгрузить ее без sudo, а затем перезагрузить ее с помощью sudo)
Ключ в файле, который вызывает его start
на load
это RunAtLoad
(и KeepAlive
держит это работает, если он умирает по какой - то причине)
<key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/>
Иногда бывает сложно получить протокол отладки от самого launchctl, но ключи StandardErrorPath
и, StandardOutPath
по крайней мере, могут помочь вам узнать, умирает ли ваше приложение из-за отсутствующей или неверной информации (например, нерасширенной переменной среды или пути без записи). Просто убедитесь, что указанный вами путь доступен для записи пользователю, выполняющему процесс.
<key>StandardErrorPath</key> <string>/tmp/appname-error.log</string> <key>StandardOutPath</key> <string>/tmp/appname-info.log</string>
Потому что они так трудно отлаживать, я бы рекомендовал использовать LaunchControl или запущен и смешайте, что со здоровым чтением launchd.info .
Кроме того, здесь есть несколько советов по отладке: https://serverfault.com/questions/183589/how-do-i-activate-launchd-logging-on-os-x
Я еще не пробовал, но это решение выглядит самым простым:
sudo launchctl log level debug tail -f /var/log/system.log