Как использовать не «устаревшие» команды launchctl для загрузки и выгрузки списков?

14

У меня есть некоторые файлы plist ~/Library/LaunchAgents.

Я с удовольствием пользуюсь launchctl load -wи launchctl unload -wвключаю и выключаю их годами. Тем не менее, я заметил, что сейчас loadи unloadпереведен в раздел «наследие» на странице руководства. Давайте назовем одного из них com.example.service.plist.

Однако, когда я пытаюсь взаимодействовать с этими списками через launchctl enable "gui/$(id -u)/com.example.service"и launchctl disable "gui/$(id -u)/com.example.service", другие команды запуска, кажется, сообщают об успехе - например, launchctl print "gui/$(id -u)"полностью показывает мне отключенные флаги, которые соответствуют состоянию, которое я установил - службы фактически не запускаются и не останавливаются или слушать и не слушать их порты.

Есть ли какой-то шаг, который я пропускаю? На данный момент я придерживаюсь loadи, unloadно я хотел бы изучить не осуждаемый способ взаимодействия с этим материалом, прежде чем Apple в конечном итоге захлопнет дверь по старому / плохому пути ...

глиф
источник
Устаревшее означает, что изменения в движении - вы все еще можете использовать загрузку и выгрузку в соответствии с вашим сердцем 10.11 и ниже. Я предполагаю, что Apple будет иметь документацию на WWDC в этом году и график миграции ...
bmike
1
Я предполагаю , что просто не может быть ответа на это пока нет, но он уверен , выглядит как enableи disableпредназначена для замены loadи unload. Я просто не могу заставить их работать так, как я ожидаю.
Символ
1
Вы пробовали следовать launchctl enableс launchctl kickstart?
Я не имею, но не launchctl kickstartдолжен просто выпустить активацию для рассматриваемой работы? Я использую launchd специально, потому что я хочу активировать только по требованию.
Символ
2
Похоже, это может помочь: babodee.wordpress.com/2016/04/09/launchctl-2-0-syntax
TJ

Ответы:

6

Я спросил пользователя Твиттера @launchderp :

@launchderp Безопасны ли launchctl loadи выгружаются ли выгрузки, по крайней мере, до 10.12 или еще что- нибудь ?

cf Как я могу использовать не "устаревшие" команды launchctl для загрузки и выгрузки списков?

И @launchderp ответил

@tjluoma Да, они все еще в безопасности. Слишком много лет зависимостей, чтобы сломать их.

Хотя это может показаться не официальным заявлением Apple, я считаю, что этот человек активно работает над launchdApple и доверяет тому, что они говорят. YMMV.

Мораль истории: если загрузка / выгрузка работает на вас, продолжайте использовать их :-)

Ти Джей Луома
источник
2
Не помечать как «принято» , потому что это не совсем решить вопрос о enableи disableа upvoted , потому что я до сих пор ценю информацию :).
Символ
1

Статья, упомянутая TJ Luoma, очень полезна. Шаги для запуска демона:

  1. Сохраните файл plist /Library/LaunchDaemons/как обычно. Допустим, файл есть com.example.mysrv.plist, а метка в plist есть com.example.mysrv.
  2. sudo launchctl bootstrap system /Library/LaunchDaemons/com.example.mysrv.plist, Обратите внимание, что путь может быть относительным (к $PWD) или абсолютным.
  3. Проверьте сервис с sudo launchctl print system/com.example.mysrv. Стоит сказать «работает».

Агенты запуска должны быть похожими. Предостережение: я понятия не имею, как остановить службу, не выгружая ее bootout.

Франклин Ю
источник