Mac OS X provides two methods for launching daemons: startup items and launchd(8) daemons. Which one you use depends largely on the versions of Mac OS X that the daemon must support.
plutil -lint <path to your plist file>
launchctl load <path to your plist file>
launchctl load -w <path to your plist file>
launchctl unload <path to your plist file>
Since the apachectl program spawns a daemon and doesn't stay open, we need launchd to work with a script that will monitor the Apache server and kickstart it appropriately when necessary.
/usr/local/apache2/bin/launchd_apache.sh
#!/bin/sh /usr/local/apache2/bin/apachectl graceful sleeptime=40 httpdArray=(`ps -U www | grep httpd | awk '{print $1}'`); let httpdCount=${#httpdArray[*]}; while (($httpdCount > 0)) do sleep $sleeptime; hpptdArray=(`ps -U www | grep httpd | awk '{print $1}'`); let httpdCount=${#httpdArray[*]}; done echo "Apache Stopped, restarting..."
/Library/LaunchDaemons/local.apache2.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>GroupName</key> <string>admin</string> <key>Label</key> <string>Apache2</string> <key>KeepAlive</key> <false/> <key>Program</key> <string>/usr/local/apache2/bin/launchd_apache.sh</string> <key>RunAtLoad</key> <true/> <key>ServiceDescription</key> <string>Launches the Apache2 httpd web server</string> <key>UserName</key> <string>root</string> </dict> </plist>
/Library/LaunchDaemons/local.mysql.plist
<?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>MySQL</string> <key>UserName</key> <string>root</string> <key>ProgramArguments</key> <array> <string>/usr/local/mysql/bin/mysqld_safe</string> <string>--user=mysql</string> </array> <key>WorkingDirectory</key> <string>/usr/local/mysql</string> <key>RunAtLoad</key> <true/> </dict> </plist>
/Library/LaunchDaemons/local.postgres.plist
* 7/1/12 2:24:05.272 PM com.apple.launchd: (Postgres[20215]) Suspicious setup: User "postgres" maps to user: _postgres
<!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>Postgres</string> <key>Disabled</key> <false/> <key>UserName</key> <string>postgres</string> <key>GroupName</key> <string>postgres</string> <key>Program</key> <string>/usr/local/pgsql/bin/postgres</string> <key>StandardOutPath</key> <string>/usr/local/pgsql/log/postgres.log</string> <key>StandardErrorPath</key> <string>/usr/local/pgsql/log/postgres.log</string> <key>EnvironmentVariables</key> <dict> <key>PGDATA</key> <string>/usr/local/pgsql/data/</string> </dict> <key>RunAtLoad</key> <true/> </dict> </plist>