[launchd-dev] fork & exit in Shell Script (Revisited)

Charles Darwin DarwinsKernel at gmail.com
Fri Nov 14 13:23:54 PST 2008

On Nov 13, 2008, at 1:00 PM, Quinn wrote:

> At 8:28 -0500 11/11/08, Charles Darwin wrote:
>> "In Mac OS X v10.4, launchd was added. This is the preferred means  
>> of adding background agents on a per-user basis. "
>> that I found here:
>> <http://developer.apple.com/documentation/MacOSX/Conceptual/ 
>> BPSystemStartup/Articles/CustomLogin.html#//apple_ref/doc/uid/ 
>> 20002134>
> That's probably true, but there are certain advantages to using a  
> login item, namely that a login item doesn't have to be code: it  
> can be anything that the Finder can open.  You can solve this  
> probably with no code by simply creating an alias to the server  
> volume in question and adding that alias to the login item list.

I have 10 machines here so that is practically impossible to do.

> And it turns out that mounting AFP volumes from a shell script is  
> tricky.  If you want the volume to act like it's been mounted via  
> standard means, you can't just use mount_afp

Then what is the purpose of having that (mount_afp utility that is)  
installed on your system?

> -- you have to make sure that Disk Arbitration knows about the  
> volume, and that means mounting it using higher level software.   
> Mounting a server volume programmatically is best done using  
> FSMountServerVolumeSync/Async.

I will look into that. Thanks for the hint.

>                    *                   *                   *
> Still, if you want a launchd agent that runs when the user logs in,  
> does its job, then quits and isn't relaunched for that session

I don't care if it relaunches for that session (which in my script it  
doesn't by the way) what I can't get launchd to is to relaunch it  
when user logs out and then logs back without rebooting the system.

> , it's pretty easy to construct one.
> $ ls -l MyScript.sh
> -rwxr-xr-x  1 quinn  staff  63 Nov 13 17:44 MyScript.sh
> $ cat MyScript.sh
> #! /bin/sh
> echo "MyScript start"
> sleep 10
> echo "MyScript end"
> $ cat Library/LaunchAgents/com.apple.dts.MyScript.plist
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"  
> "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
> <plist version="1.0">
> <dict>
> 	<key>Label</key>
> 	<string>com.apple.MyScript</string>
>         <key>LimitLoadToSessionType</key>
>         <string>Aqua</string>
>         <key>RunAtLoad</key>
>         <true/>
> 	<key>ProgramArguments</key>
> 	<array>
> 		<string>/Users/quinn/MyScript.sh</string>
> 	</array>
> </dict>
> </plist>
> The "LimitLoadToSessionType" of "Aqua" ensures that the job is only  
> loaded into GUI sessions.

I will give LimitLoadToSessionType a spin on Monday. Thanks again.


>   The "RunAtLoad" of true means that the job is run once when it's  
> loaded (that is, when the GUI session is started).  And the absence  
> of "KeepAlive" or "OnDemand" means that the job is not  
> automatically relaunched when it exits.
> S+E
> -- 
> Quinn "The Eskimo!"                    <http://www.apple.com/ 
> developer/>
> Apple Developer Relations, Developer Technical Support, Core OS/ 
> Hardware
> _______________________________________________
> launchd-dev mailing list
> launchd-dev at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/launchd-dev

More information about the launchd-dev mailing list