Start stunnel service on bootup
It appears that stunnel backgrounds itself, i.e. it forks a subprocess to do the actual work in the background, then exits. When a launchd-managed process exits, launchd defaults to automatically killing off any leftover subprocesses... like the background stunnel process. I haven't tested these, but there are two simple ways to avoid this.

First, you can tell launchd not to kill leftover subprocesses by adding &lt;key&gt;AbandonProcessGroup&lt;/key&gt;&lt;true/&gt; to the .plist.

Second, you can tell stunnel to not background itself by adding foreground = yes to its config file. If you do the second option, you can probably also remove &lt;key&gt;KeepAlive&lt;/key&gt;&lt;false/&gt; from your .plist, and let launchd manage the stunnel daemon properly.

[Update] If that and Mark's suggestions don't get it working, I'd recommend adding some debugging output in the script, and sending that and stunnel's output to a log file. Something like this:

#!/bin/bash
#stunnel startup
exec &gt;/tmp/stunnel.log 2&gt;&amp;1 # Send all output to a debug log
sleep 30 #Delay added for the system to boot properly
echo "$(date) - Starting stunnel"
sudo /path/to/stunnel
echo "$(date) - stunnel exited with status $?"
echo


You can do similar things by adding StandardOutPath and StandardErrorPath keys, but in this case it's easier to edit the script.