Using launchctl on Mac OSX 10.10 to run a script periodically

Lately I’ve been playing around with mutt, a “small but powerful text-based email client for Unix operating systems” and offlineimap, a software that downloads your mailbox as a local Maildir.

After I finally got everything set up (easier said than done), I needed a way to make offlineimap synchronize my mailbox periodically. Apple recommends usinglaunchctlinstead of crontab. The following example shows how to runofflineimapin quiet mode every two minutes:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">

This file is basically an XML file, but the extension you must use is .plist. You would typically call it something like com.yourname.scriptname.plist. Place it in the folder ~/Library/LaunchAgents/, and make sure you replace yourname and scriptname with something relevant.

When you’ve saved the file to the specified location, type the following to load it into launchctl:

launchctl load ~/Library/LaunchAgents/com.yourname.scriptname.plist

If you ever need to remove it from launchctl, you can type the following:

launchctl remove ~/Library/LaunchAgents/com.yourname.scriptname.plist