나는 LaunchDaemon을 가지고 있습니다. 실행되면 SIMBL이 설치되어 있는지 확인합니다. SIMBL이 설치되어 있지 않으면 NSTask를 사용하여 SIMBL.pkg에/usr/sbin/installer를 실행합니다. 내 LaunchDaemon의 NSTask 환경이 $ 사용자가 설정되어 있지 않기 때문에,코드가 LaunchDaemon으로 실행될 때 어떻게 다시 부팅하지 않고 LaunchAgent를 시작할 수 있습니까?
sudo -u "$USER" -- /bin/launchctl load -F -S Aqua -D user "${LAUNCHD_PLIST}"
이 실패
SIMBL의 postflight 스크립트는 즉시 SIMBL의 LaunchAgent을 시작하는 launchctl load 명령을 실행하려고합니다.
내 데몬이 시스템 구성 프레임 워크로 현재 사용자를 감지하고 setEnvironment와 NSTask에 전달하는 경우, 날 launchctl 버그 아웃 :
나는 데몬을 실현Bug: launchctl.c:2325 (23930):13: (dbfd = open(g_job_overrides_db_path, O_RDONLY | O_EXLOCK | O_CREAT, S_IRUSR | S_IWUSR)) != -1
, 정의, 작동하지합니다 사용자 세션에서. 마찬가지로, 애플은 LaunchAgents를 LaunchDaemons의 도우미 개체로 추천하여 해당 사용자 세션 작업을 수행하는 것으로 보입니다. 그러한 에이전트를 즉시 실행할 수있는 방법이 있습니까?
모든 .plists가 올바른 위치에 있습니다. (재부팅 후 다음 번 launchctl이 정기적으로로드되기 때문에 실행됩니다.) 그래서 처음 생각한 것은 launchctl에 다시로드하라는 것입니다. 그러나 all the code to do that is commented out in launchctl.c :
// { "reload", reload_cmd, "Reload configuration files and/or directories" },
... launchd
미친 .... 저를 구동하는 방법
* In later versions of launchd, I hope to load everything in the first pass,
* then do the Bonjour magic on the jobs that need it, and reload them, but for now,
* I haven't thought through the various complexities of reloading jobs, and therefore
* launchd doesn't have reload support right now.
OS X "El Capitan"10.11 (15A204h)에서는 "launchctl bsexec"이 더 이상 작동하지 않는 것 같습니다.이 단계가 필요한 이유가 있습니까? – yairchu
바로 컨텍스트에서 에이전트를 다시 시작하는 부분입니다. 그것 없이는 OP가 요청할 때 다시 시작하지 않습니다. 나는 10.11에서 이것이 가능한지 (만약 있다면) 어떤 것이 가능한지 모른다. –
에는 10.11 :'launchctl bootstrap gui/\'stat -f % u \''와 같은 방법이있는 것 같습니다. http://stackoverflow.com/questions/1106638/starting-stopping-a-launchd-agent-for-all-users-with-gui-sessions#comment51143118_31534614 –
yairchu