В состав программы входят 2 демона, один("демон") должен запускаться в контексте рутовой сессии, а другой("агент") в сессии каждого залогиненого пользователя.
Если создать для них файлы *.plist и поместить их в /Library/LaunchDaemons и /Library/LaunchAgents соответственно, то после рестарта OS X запустит демон в рутовой сессии, и будет запускать агента в каждой пользовательской сессии.
Но очень не хотелось бы требовать перезагрузку ОС после установки программы.
Пробовал запускать демона с помощью sudo launchctl load *.plist, он хоть и запускался от рута, но в контексте текущей пользовательской сессии, а не в рутовой. И при логофе этот процесс погибал.
Также пробовал запустить агента с помощью launchctl bsexec <pid> chroot -u <user> / launchctl load *.plist, где <pid> — один из процессов пользователя <user>. Но получал аналогичную ситуацию — агент запускался от имени пользователя <user>, но в контексте текущей сессии.
Можно ли запустить демона и агентов вручную (с помощью скрипта или API-функций) в контексте нужной сессии без перезагрузки? Интересуют OS X версии 10.9+
Здравствуйте, MuPoB, Вы писали:
MPB>Можно ли запустить демона и агентов вручную (с помощью скрипта или API-функций) в контексте нужной сессии без перезагрузки? Интересуют OS X версии 10.9+
Можно и нужно. Тебе стоит смотреть в сторону
WatchPaths ключа для plist демона и агента. Если кратко, то система мониторит директорию и тебе достаточно сделать touch ей что бы демон поднялся с заданными привилегиями.
Здравствуйте, kaa.python, Вы писали:
KP>Можно и нужно. Тебе стоит смотреть в сторону WatchPaths ключа для plist демона и агента.
Спасибо, как-то я пропустил этот момент в документации. С этим ключом практически всё получилось.
Но с запуском агентов проблема осталась.
Допустим, у нас 2 пользовательских сессии, первая активна, вторая залочена.
Можно ли после установки запустить агента из первой сессии во обоих сессиях?
Если сделать launchctl load agent.plist, то агент запустится только в первой сессии. А во второй не получается, агент запустится только после LogOff/LogOn. touch directory тоже не помогает