March 17th, 2013 — Wordman
Six years ago, I posted about using rsync to backup a web server (many of the difficulties mentioned there have since been fixed). I’m finally getting around to switch from using
cron to run that backup to using the new hotness:
launchd. This task was made easier by Preston Holmes’ cron to launchd converter.
To summarize the prior post, I have a special user on my Mac named “backup”. The only thing this user does is backup other stuff, such as my web server. This user has a script (shown in the previous post) in
~/Documents/webbackup. I want this script to run at, say, 2:30am as this
backup user, even if no one is logged on. To do this with
launchd, I first need a file describing the job:
<?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> <!-- Write this file to /Library/LaunchDaemons/ --> <key>Label</key> <string>com.mycompany.webbackup</string> <key>UserName</key> <string>backup</string> <key>ProgramArguments</key> <array> <string>/Users/backup/Documents/webbackup</string> </array> <key>StartCalendarInterval</key> <array> <dict> <key>Hour</key> <integer>2</integer> <key>Minute</key> <integer>30</integer> </dict> </array> <key>StandardErrorPath</key> <string>/Users/backup/Documents/webbackup.log</string> <key>StandardOutPath</key> <string>/Users/backup/Documents/webbackup.log</string> </dict> </plist>
While there are ways to run this job using
launchctl, if you want it to run automatically, unassisted, even after rebooting your machine, you need to write the file to
/Library/LaunchDaemon/com.mycompany.webbackup.plist. Note, that is
~/Library, so you will likely need to use
sudo to get the file there.
Also note that the name of the file should match the “Label” key in the file, with
.plist suffix. Note also that this “Label” is used as a unique id, so if you make more than one of these job descriptions you need to change both the filename and the “Label” key.