Saturn is a library for building and managing periodic cron-like jobs.
(require '[mount.core :as mount]
         '[saturn.core :as saturn]
         '[saturn.store.pg :as store])
(def commands
  {"cmd1" {:func #(println "cmd1")
           :schedule [:every :monday :at 9 0]}})
(defn report-error [{:keys [command error]}]
  (println "cron error" command error))
(defn report-overlap [{:keys [command]}]
  (println "cron command overlap" command))
         
(mount/defstate cron
  :start (saturn/make commands
           {:store            (store/pg db-conn)
            :restart-skipped? true
            :cleanup-history? true
            :report-error     report-error
            :report-overlap   report-overlap})
  :stop  (saturn/stop cron))| option | type | description | 
|---|---|---|
store | 
saturn.store/State | 
schedule state storage | 
restart-skipped? | 
boolean | 
restart previously unfinished jobs | 
cleanup-history? | 
boolean | 
remove runs history from storage | 
report-error | 
IFn | 
function to report run errors | 
report-overlap | 
IFn | 
function to report overlap errors | 
Question mark means component is optional, star - it repeats 0 or more times.
[:every period? unit <:at hour? minute>*]
| component | description | 
|---|---|
period | 
int, like in "every 3 days" or "every 30 minutes" | 
unit | 
minute(s), hour(s), day(s) and week day names | 
hour | 
from 0 to 24 | 
minute | 
from 0 to 60 | 
Examples:
[:every :minute][:every 2 :hours :at 50][:every 1 :day :at 8 0, 13 0, 20 0][:every :monday :at 9 0]