launchd run command every minute of a specific hour On man launchd.plist it says (emphasis mine)


  StartCalendarInterval  This optional key causes the job to be started every
  calendar interval as specified. Missing arguments are considered
  to be wildcard. The semantics are similar to crontab(5) in how
  firing dates are specified. Multiple dictionaries may be specified
  in an array to schedule multiple calendar intervals.


My plist file is /Users/enricozb/test.plist and contains

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
&lt;plist version="1.0"&gt;
&lt;dict&gt;
    &lt;key&gt;Label&lt;/key&gt;
    &lt;string&gt;com.enricozb.test&lt;/string&gt;
    &lt;key&gt;ProgramArguments&lt;/key&gt;
    &lt;array&gt;
        &lt;string&gt;date&lt;/string&gt;
    &lt;/array&gt;
    &lt;key&gt;StandardOutPath&lt;/key&gt;
    &lt;string&gt;/Users/enricozb/test.txt&lt;/string&gt;
    &lt;key&gt;StartCalendarInterval&lt;/key&gt;
    &lt;dict&gt;
        &lt;key&gt;Hour&lt;/key&gt;
        &lt;integer&gt;21&lt;/integer&gt;
    &lt;/dict&gt;
&lt;/dict&gt;
&lt;/plist&gt;


Notice that Hour is set to 21, aka, 9PM. Also, notice that the command is just basically date &gt; /Users/enricozb/test.txt. I ran

launchctl load /Users/enricozb/test.plist
launchctl start com.enricozb.test


This fires once right after the launchctl start command, and never again.

I was assuming that since the documentation says that missing arguments are wildcard, that the Minute field would be wildcard too. Why is this not running every minute?
Edit start

You got it all correct except for enclosing your &lt;dict&gt; element inside an &lt;array&gt; element. Your script will run every minute from 21:00 to 21:59 with the following as your StartCalendarInterval key : 

    &lt;key&gt;StartCalendarInterval&lt;/key&gt;
    &lt;array&gt;
        &lt;dict&gt;
            &lt;key&gt;Hour&lt;/key&gt;
            &lt;integer&gt;21&lt;/integer&gt;
        &lt;/dict&gt;
    &lt;/array&gt;


If you wanted your script to run every minute, every hour, every day, every year, the following would be the correct (but certainly not obvious)  syntax for that: 

    &lt;key&gt;StartCalendarInterval&lt;/key&gt;
    &lt;array&gt;
        &lt;dict/&gt;
    &lt;/array&gt;



My original answer (below) would also work, but it's clearly much more tedious! OTOH, if one needed every other minute, or certain minutes, it might be useful.

Edit end



&lt;key&gt;StartCalendarInterval&lt;/key&gt;
    &lt;array&gt;
        &lt;dict&gt;
            &lt;key&gt;Minute&lt;/key&gt;
            &lt;integer&gt;0&lt;/integer&gt;
        &lt;/dict&gt;
        &lt;dict&gt;
            &lt;key&gt;Minute&lt;/key&gt;
            &lt;integer&gt;1&lt;/integer&gt;
        &lt;/dict&gt;
        &lt;dict&gt;
            &lt;key&gt;Minute&lt;/key&gt;
            &lt;integer&gt;2&lt;/integer&gt;
        &lt;/dict&gt;
        &lt;dict&gt;
            &lt;key&gt;Minute&lt;/key&gt;
            &lt;integer&gt;3&lt;/integer&gt;
        &lt;/dict&gt;
        &lt;dict&gt;
            &lt;key&gt;Minute&lt;/key&gt;
            &lt;integer&gt;4&lt;/integer&gt;
        &lt;/dict&gt;

       ... ad nauseum ...

        &lt;dict&gt;
            &lt;key&gt;Minute&lt;/key&gt;
            &lt;integer&gt;59&lt;/integer&gt;
        &lt;/dict&gt;

    &lt;/array&gt;


To answer your question, "Why is this not running every minute?", it's only because you failed to enclose &lt;dict&gt; inside &lt;array&gt;.  FWIW, it seems very odd to me also, and WHY it's designed this way is an answer I'd like to hear myself. But then I guess Apple could use the defense that "just because the semantics are similar does not mean the syntax is."