Until I recently switched to XAMPP I had been using MAMP to provide a local server environment on my Mac. A small but none the less important feature of MAMP is an option to have the Apache and MySQL servers started when you open the application. So, by checking this option and including MAMP as a Login Item my MAMP servers were up-and-running when I logged in. Unfortunately, XAMPP has no such option. Including XAMPP as a Login Item merely opens the XAMPP Control.app and I have to start the servers manually. An extra step I’d rather not have to do.
So, how can I have my XAMPP servers running whenever I login? The answer, by using a daemon.
Daemons in OS X are system-wide services that are launched at system start-up. They are managed by a program named launchd which was first introduced in OS X 10.4 Tiger. Services that are run on a per-user basis are known as agents, but are still managed by launchd. From a user’s perspective, launchd replaces the more traditional cron.
To have launchd start XAMPP’s Apache server as a service we need to create a launchd configuration file. This configuration file has a .plist extension, a format familiar to many OS X users. launchd configuration files can be placed in one of three folders determining when and for whom the service will start.
- System startup [all users]: /Library/LaunchDaemons/
- User login [all users]: /Library/LaunchAgents/
- User login [this user only]: ~/Library/LaunchAgents/
2. What You’ll Need
Any text editor will allow you to create the necessary configuration file, but you’ll be asked to authenticate if saving the file in either the /Library/LaunchDaemons/ or /Library/LaunchAgents/ folders. You can use a text editor like Smultron by Peter Borg which will allow you to authenticate. I’m sure there are others. There’s also a great little app called Lingon, coincidentally by the same author, which makes the whole configuration a snap. Whilst both Smultron and Lingon are free they’re unfortunately no longer being developed. However, the latest (last?) versions of both run fine under OS X 10.5.8 Leopard 0S X 10.6.2 Snow Leopard.
3. Creating the launchd Configuration File
The configuration file I’m going to create will start XAMPP’s Apache server as a service at system startup. In Terminal I’d type /Applications/XAMPP/xamppfiles/xampp startapache to start XAMPP’s Apache server, so this is the command I’ll include in my configuration file. There are other options available, but I’m only concerned with starting Apache. A full list of parameters can be found here.
If you’re using the standard Apache port 80 in XAMPP or any non-standard port below 1024 then you’ll need to place the configuration file in the /Library/LaunchDaemons/ folder. This is because XAMPP requires authentication to use ports below 1024 and a configuration file in the /Library/LaunchDaemons/ folder will run as root. If you place the configuration file in either of the other two folders it won’t be able to authenticate and the Apache server won’t start.
To start creating the configuration file, open Lingon and click the New button at the top-left corner.
Lingon will ask where you want to create the configuration file. Select Users Daemons and click Create.
To configure the LaunchDaemon we need to do just 4 things:
- 1. Ensure the Enabled option is checked. If later you wish to disable the LaunchDaemon simply uncheck this option.
- 2. Enter a name for the configuration. I’ve called mine apachefriends.xampp.apache.start. Lingon will add the .plist extension for you.
- 3. Enter the command, as you would in Terminal, to start Apache. This is /Applications/XAMPP/xamppfiles/xampp startapache
- 4. We’re only concerned with the Run it when it is loaded by the system (at startup or login). All other options should remain unchecked.
That’s it. Save the file and you’re done. Whenever you reboot your Mac, XAMPP’s Apache server will be up-and-runing when you log-in. If you navigate to the /Library/LaunchDaemons/ folder you’ll now see the apachefriends.xampp.apache.start.plist file.
At the bottom right-hand corner of the Lingon window there’s an Expert Mode button. If you click this button you’ll see the configuration file that Lingon’s created. It should resemble this:
<?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> <false/> <key>Label</key> <string>apachefriends.xampp.apache.start</string> <key>ProgramArguments</key> <array> <string>/Applications/XAMPP/xamppfiles/xampp</string> <string>startapache</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>As an alternative to creating the configuration file with Lingon, simply copy and paste the code block above into a text editor and save the file as apachefriends.xampp.apache.start.plist in the /Library/LaunchDaemons/ folder.
4. Adding XAMPP Control.app Login Items
This step is optional and only for the terminally lazy like me. If you want the XAMPP Control.app opened when you login simply add it to the Login Items in System Preferences > Accounts > your account > Login Items and set it to Hide.