[launchd-dev] Cause of "Service cannot load in requested session"?

Damien Sorresso dsorresso at apple.com
Fri Nov 13 16:19:10 PST 2015


As I said before, launchd does not support background agents coming from the user's home directory.
-damien

On 13 Nov, 2015, at 16:03, James Bucanek <subscriber at gloaming.com> wrote:
> 
> Greetings,
> 
> I finally had a chance to run this to ground. Here's what I discovered:
> 
> Basically, LimitLoadToSessionType=Background is broken. (bug report #23536982)
> 
> I was able to narrow down the problem to this simple example. First, write the following plist file to ~/Library/LaunchAgents/info.test.agent.plist (edit the path, if you want to play along at home):
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
> <plist version="1.0">
> <dict>
> <key>Label</key>
> <string>info.test.agent</string>
> <key>LimitLoadToSessionType</key>
> <string>Background</string>
> <key>ProgramArguments</key>
> <array>
> <string>/usr/bin/touch</string>
> <string>/Users/james/Desktop/TestAgentDidRun.txt</string>
> </array>
> <key>RunAtLoad</key>
> <true/>
> </dict>
> </plist>
> 
> Now, restart the computer. What *should* happen is /usr/bin/touch should execute when the background session for the user is created, creating the /Users/james/Desktop/TestAgentDidRun.txt file.
> 
> What actually happens is nothing. The agent is never started and the file is never created. The behavior is the same in 10.10 and 10.11.
> 
> When the Aqua session is finally created, you still get this message in the console:
> 
> Nov 12 22:14:41 Jamess-Mac-Pro otherbsd[261]: Failed to bootstrap agent: path = /Users/james/Library/LaunchAgents/info.test.agent.plist, error = 134: Service cannot load in requested session
> 
> But, as previously discussed, this just the agent getting loaded into the Aqua session, and failing because it can't.
> 
> I was also able to confirm Damien's workaround of manually reloading the service once the Aqua session is created. I have another Aqua-only GUI agent. I've modified it so that it looks to see if my (Background) scheduler process is running. If it isn't running, but is installed, it reloads it by executing the following command:
> 
>    launchctl bootstrap user/<uid> ~/Library/LaunchAgents/com.qrecall.scheduler.plist
> 
> That starts the scheduler process in the background session.
> 
> This doesn't completely solve my problem, because what I *really* want is for the Background agent to start before the user logs in. But at least it will now start when the user does log in, and it continues to run after they log out.
> 
> James
> _______________________________________________
> launchd-dev mailing list
> launchd-dev at lists.macosforge.org
> https://lists.macosforge.org/mailman/listinfo/launchd-dev

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3327 bytes
Desc: not available
URL: <https://lists.macosforge.org/pipermail/launchd-dev/attachments/20151113/67f4a2ba/attachment.p7s>


More information about the launchd-dev mailing list