私はLaunchDaemonを持っています。実行時にSIMBLがインストールされているかどうかを確認します。 SIMBLがインストールされていない場合は、NSTaskを使用してSIMBL.pkgに/ usr/sbin/installerを実行します。私LaunchDaemonのNSTask環境が$ USERが設定されていないので、コードがLaunchDaemonとして実行されているときに、再起動せずに初めてLaunchAgentを起動する方法はありますか?
sudo -u "$USER" -- /bin/launchctl load -F -S Aqua -D user "${LAUNCHD_PLIST}"
これは失敗します。
SIMBLの飛行後スクリプトスクリプトは、その後すぐにSIMBLのLaunchAgentを開始するためにlaunchctl loadコマンドを実行しようとします。
私は私のデーモンは、System Configurationフレームワークを持つ現在のユーザを検出し、私に、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
私は作動しません、定義によって、デーモンを実現ユーザーセッションで同じように、Appleは、LaunchAgentsをLaunchDaemonsのヘルパーオブジェクトとして、そのユーザーセッション作業を行うことを推奨しているようです。そのようなエージェントをすぐに稼働させる方法はありますか?
私はすべての.plistを適切な場所に置いています(リブート後に起動します。次回起動時に定期的に読み込みます)。最初の考えは、launchctlに再ロードを指示することでした。しかしall the code to do that is commented out in launchctl.c:
// { "reload", reload_cmd, "Reload configuration files and/or directories" },
を...
* 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 \ '<あなたのエージェントのplistファイルパス>'。 http://stackoverflow.com/questions/1106638/starting-stopping-a-launchd-agent-for-all-users-with-gui-sessions#comment51143118_31534614 – yairchu