Вы также можете взглянуть на библиотеку chime .
Я не тестировал этот код, но что-то вроде этого.
(ns my.example
(:require [chime :refer [chime-at]])
(:import [java.time Instant LocalTime ZonedDateTime ZoneId Period]))
(defn my-task []
(println "Executing a task"))
(defn periodic-seq [^Instant start duration-or-period]
(iterate #(.addTo duration-or-period %) start)) ;; produces a lazy-seq of Instants
;; generates infinite sequence of days. Change the time zone to the one you need.
(def days
(periodic-seq (-> (LocalTime/of 23 0 0)
(.adjustInto (ZonedDateTime/now (ZoneId/of "America/New_York")))
.toInstant)
(Period/ofDays 1)))
(chime-at days (fn [time] (my-task)))
chime-at возвращает функция с нулевым аргументом, которую можно вызвать, чтобы отменить расписание. Таким образом, вы должны начать график, как это.
(def cancel (chime-at days (fn [time] my-task)))
(cancel)
Опять же, я не проверял этот код.