[launchd-dev] Cause of "Service cannot load in requested session"?
James Bucanek
subscriber at gloaming.com
Sat Nov 7 11:20:35 PST 2015
Thanks Damien, Gregory, and Mihai for all the great info.
So, here's what we (I've) learned:
(1) A process running in the "Background" session does not guarantee
that the home folder is reachable.
(2) Logging out might make the home folder unreachable.
(3) If the home folder isn't reachable when the user's bootstrap and
Background session are created, a background service that loads only in
the "Background" session might not start.
Issues (1) and (2) aren't too much of concern for my product (backup
software) because it's only really useful when the home folder is
reachable. For the vast major of users, the home folder is reachable
before and after they log out, so these are edge cased that I'll address
as such.
(3) is the big problem. If the service is limited to the "Background"
session, and it isn't started when the background session is created, it
is never started. This is, essentially, the bug I'm trying to fix.
Question/Idea:
Rereading the LimitLoadToSessionType in man launchd.plist, it occurred
to me that this can be an array, and it can be omitted. If I omit it or
set it to ["Background","Aqua"], would that solve my problem? I would
hope that setting it to an array would mean the service can run in
*either* the background or GUI session. This leads me to hope that it
would be loaded in the Background session if it could, and then again in
the Aqua session if it couldn't. (My fear is that it would start two
services, but I can actually deal with that pretty easily.)
Problem/FOOBAR:
All of this speculation about mounting and unmounting home folders has
been very instructional, but I just got this cold dose of reality: I've
heard back from my customer and they say that there is nothing special
about their home folder. It's a SSD iMac with a vanilla installation of
El Capitan. Furthermore, this same problem just happened to *me* on my
MacPro system (still on Yosemite, 'cause I can't upgrade to Xocde 7 just
yet). I can guarantee that my home folder is on my boot partition and I
don't employ any FileVault encryption, mountpoints, links, etc. I have
my Mac set to automatically log into my primary account on startup. This
morning my scheduler agent wasn't running and I found this in my system.log:
Nov 7 09:46:04 marchhare.local otherbsd[382]: Failed to bootstrap
agent: path =
/Users/james/Library/LaunchAgents/com.qrecall.scheduler.plist, error =
134: Service cannot load in requested session
Also disturbing is that I don't see any evidence that my system daemon
installed in
/Library/LaunchDaemons/com.qrecall.scheduler.kickstart.plist is ever
started, either. I'm reconfiguring it's stdout to log to a specific file
to confirm this, but so far it doesn't look like it's getting started.
So, I'm back to square #1. Does anyone have any other ideas as to why an
installed LimitLoadToSession=Background,RunAtLoad=1 service wouldn't be
started by launchd?
I'm adding Debug=1 to my agent and daemon .plist(s) in the hopes that
might provide some useful information.
James
More information about the launchd-dev
mailing list