[#exec-cron]
= Execute on schedule (cron)

OliveTin can execute actions on a schedule, and uses a cron format for configuration.

[source,yaml]
.`config.yaml`
----
actions:
  - title: Say hello
    shell: echo "Hello!"
    execOnCron:
      - "@hourly"

  - title: Say goodbye
    shell: echo "Say Goodbye"
    execOnCron:
      - "*/5 * * * *" # Every 5 minutes
----

This is a fantastic website: https://cron.help/

== Support for seconds in cron

The default cron format for OliveTin supports the Unix/Linux format - 5 fields, with no support for seconds. This is by far the most popular format that most people are used to.

If you need per-second resolution for your actions, this can be enabled in your config - meaning that your cronlines will support 6 columns. The first "new" column is seconds. For example, to execute `date` every 5 seconds;

[source,yaml]
.`config.yaml`
----
cronSupportForSeconds: true

actions:
  title: Execute every 5 seconds
  shell: date
  execOnCron:
    - "*/5 * * * * *"
----


== Cron and ACLs

If you have enabled ACL, cron tasks are run as the user `cron`, which means that your ACL needs to allow the cron user to execute the action. This is one possibilty:

[source,yaml]
.`config.yaml`
----
accessControlLists:
  - name: "cron"
    matchUsernames:
      - cron
    permissions:
      exec: true
actions:
  - title: Say hello
    shell: echo "Hello!"
    execOnCron:
      - "@hourly"
    acls:
        - "cron"
----
