Skip to content
Cron data structure and parser for Haskell
Haskell
Branch: master
Clone or download
Latest commit 910d5b4 Oct 29, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bench
src/System
test
.ghci
.gitignore
.travis.yml
LICENSE
README.md
Setup.lhs
changelog
cron.cabal
stack-lts-2.yaml
stack-lts-3.yaml Add special resolutions for old ltses Nov 22, 2016
stack.yaml

README.md

cron

Build Status

Cron data structure and Attoparsec parser for Haskell. The idea is to embed it in larger systems which want to roll their own scheduled tasks in a format that people are used to.

System.Cron is where all the interesting datatypes live. You will also find scheduleMatches, which you can use to compare a time against a CronSchedule to see if an action needs to be performed. System.Cron.Parser is where you will find the parsers cronSchedule, crontabEntry and cronTab. To parse individual schedules up to full crontab files. System.Cron.Describe is where you will find the describe function for creating human-readable strings from cron schedules, as well as any options to control how the description is created.

To do anything, you'll need to install cabal-dev with cabal.

To build, run:

make

To run tests, run:

make test

If you have inotify-tools, run this to run tests continuously.

make autotest

To generate docs:

make docs

Scheduler

Cron offers a scheduling monad which can be found in System.Cron.Schedule. This monad transform allows you to declare a set of jobs (of the type IO ()) that will be executed at intervals defined by cron strings.

main :: IO ()
main = do
    ...
    tids <- execSchedule $ do
        addJob job1 "* * * * *"
        addJob job2 "0 * * * *"
    print tids
    ...

job1 :: IO ()
job1 = putStrLn "Job 1"

job2 :: IO ()
job2 = putStrLn "Job 2"

Describe

main :: IO ()
main = do
  let Right cs1 = parseCronSchedule "*/2 * 3 * 4,5,6"
  print $ describe defaultOpts cs1

  let Right cs2 = parseCronSchedule "*/2 12 3 * 4,5,6"
  print $ describe (twentyFourHourFormat <> verbose) cs2

Contributors

You can’t perform that action at this time.