Automate offlineimap sync using Launchd on Mac OSX

I am now on a mutt + offlineimap setup for both my work and personal emails (love thy mutt), I will put a post later on why and how am I doing it, posting how to automatically run the offlineimap on a MacOSX (10.8) using Launchd.

Create a file in user’s LaunchAgents directory, the label naming convention that Apple uses a typically weird but okay as long as it works:

~/Library/LaunchAgents/org.abhinav.mail.abhinav.plist

My offlineimap plist file looks like 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">


        Label
                org.abhinav.mail.abhinav
        ProgramArguments
        
                /usr/local/bin/offlineimap
                -a AbhinavAbhinavOrg
        
        RunAtLoad
                
        StartInterval
                60
        TimeOut
                180
        StandardErrorPath
                /Users/abhinav/log/offlineimap_abhinav_error.log
        StandardOutPath
                /Users/abhinav/log/offlineimap_abhinav.log


Then run following to submit it to Launchd.

launchctl load ~/Library/LaunchAgents/org.abhinav.mail.abhinav.plist

In short, above plist file tells Launchd to start the offlineimap application with -a mailboxname argument every 60 minutes and start at load also, time it out if it’s running or stuck for more than 180 seconds and puts stdin and stderr in defined logs. Works beautifully for me.

I took help from here, here and Steve Losh’s guide to a homely mutt.

This entry was posted in mail, open and tagged , , , , , , , , , , , , . Bookmark the permalink.

2 Responses to Automate offlineimap sync using Launchd on Mac OSX

  1. Dominique says:

    Thanks for this post. I have a similar setup but the launchd job doesn’t seem to survive when the computer goes to sleep. I tried to add

    KeepAlive

    NetworkState


    but that didn’t seem to help. I’m on 10.9. Any ideas?

  2. Dominique says:

    Wow. That markup didn’t quite work. I meant to type:

    KeepAlive

    NetworkState

Leave a Reply

Your email address will not be published. Required fields are marked *