Not able to run the startup script upon login

scriptstartup

I’m using OS X Yosemite. I’m trying to run an sh script upon login, but I’m having problems. I created the following file in my /Library/LaunchAgents directory …

-rwxr-xr-x  1 root  wheel  604 Oct 19 09:24 eXist.plist

The contents of the file are as follows:

<?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>eXist</string>
        <key>Program</key>
        <string>/Applications/eXist-db/bin/startup.sh</string>
        <key>RunAtLoad</key>
        <true/>
        <key>UserName</key>
        <string>root</string>
        <key>StandardErorPath</key>
        <String>/tmp/eXistDB.err</string>
        <key>StandardOutputPath</key>
        <string>/tmp/eXistDB.out</string>
    </dict>
</plist>

However, nothing is getting run (at least no output files are getting generated) and I can’t figure out why. I have verified the path exists. How can I get my script to run upon login?

Edit:

To prove the path exists, here is the output when tryihng the path in the script versus what was suggested …

Daves-MacBook-Pro-2:~ davea$ ls /Applications/eXist-db/bin/startup.sh 
/Applications/eXist-db/bin/startup.sh
Daves-MacBook-Pro-2:~ davea$ ls /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh
ls: /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh: No such file or directory

Best Answer

You made some mistakes in your plist:

  • /Applications/eXist-db/bin/startup.sh probably doesn't exist if you have installed eXist-db 2.2

    A valid path is /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh

  • StandardErorPath and StandardOutputPath are no valid keys

    Valid keys are StandardErrorPath and StandardOutPath

  • probably the root <-> launchd problem already addressed by patrix

  • the plist doesn't have to be executable

To start the app after logging in with your user simply add it to System Preferences -> Users & Groups -> Your user -> Login Items


To start eXist-db 2.0 at boot time and jetty after logging in your user you have to do the following:

If you haven't done this already, first enter:

sudo /Applications/eXist-db/tools/wrapper/bin/exist.sh install

to install a LaunchDaemon org.tanukisoftware.wrapper.eXist-db.plist in /Library/LaunchDaemons/. If you want to add a StandardErrorPath and StandardOutPath modify the file with sudo nano /Library/LaunchDaemons/org.tanukisoftware.wrapper.eXist-db.plist.

It should look like this finally:

<?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>Disabled</key>
    <true/>
    <key>Label</key>
    <string>org.tanukisoftware.wrapper.eXist-db</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/eXist-db/tools/wrapper/bin/exist.sh</string>
        <string>launchdinternal</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/org.tanukisoftware.wrapper.eXist-db.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/org.tanukisoftware.wrapper.eXist-db.stdout</string>
</dict>
</plist>

Load the daemon permanently with:

sudo launchctl load -w /Library/LaunchDaemons/org.tanukisoftware.wrapper.eXist-db.plist 

Now create a second file in ~/Library/LaunchDaemons/ named com.eXist.plist with nano. It should look like this finally:

<?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>com.eXist</string>
    <key>Program</key>
    <string>/Applications/eXist-db/bin/startup.sh</string>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/com.eXist.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/com.eXist.stdout</string>
</dict>
</plist>

A StandardErrorPath and StandardOutPath was added.

Load the agent permanently with:

launchctl load -w ~/Library/LaunchAgents/com.eXist.plist

Done.


Don't forget to set your (or the) JAVA_HOME variable properly. If you use a newer eXist-db release (e.g. 2.2) you have to add at least /Contents/Resources/ to the paths of exist.sh and startup.sh in the plist (please check the proper paths by opening the app bundle.


Hint: Don't use TextEdit to modify the plists: otherwise the plist files might be malformed.