@ariya/berkala

Run scheduled tasks

Usage no npm install needed!

<script type="module">
  import ariyaBerkala from 'https://cdn.skypack.dev/@ariya/berkala';
</script>

README

Berkala

GitHub license Tests

Berkala runs scheduled tasks specified in a YAML-based configuration.

To get started, first download the binary for your operating system from the Releases page. Unpack the ZIP file and run the executable.

Since a config file does not exist yet, you will be offered to create one. Simply accept it and berkala.yml will be created, which may look like the following:

tasks:

  # Without an explicit interval, the task runs immediately
  boot:
    steps:
    - notify: Berkala starts now

  stay-hydrated:
    interval: every 1 hour
    steps:
    - notify: Drink some water! # TODO: how much?
    - print: Reminder was sent

  lunch:
    interval: at 11:58am
    steps:
    - notify: It's lunch time very soon
      title: Important
    - say: Get ready for lunch

  sign-of-life:
    interval: every 2 hours
    steps:
    - run: ping -c 7 google.com
      timeout-minutes: 2

  weekend-exercise:
    cron: 0 9 * * 6  # every 9 morning on Saturday
    steps:
    - notify: Time for some exercises!
      title: Stay healthy

Just like any regular YAML, everything from the # character until the end of the line will be ignored. Use this to insert comments.

The schedule for each task can be specified as:

If neither is explicitly stated, then the task runs right away.

Each task consists of one or more steps.

Every step must be one of the following:

run: executes a shell command

Example:

  sign-of-life:
    interval: every 30 minutes
    steps:
    - run: ping -c 7 google.com

Optionally, timeout-minutes can be used to limit the execution time and working-directory can be used to set the directory to start the execution from.

Another example:

  sys-resource:
    interval: every 2 hours
    steps:
    - run: |
        date >> resources.log
        top | head -n 4 >> resources.log
      timeout-minutes: 3
      working-directory: /var/log
print: displays a message to the standard output

Example:

  morning:
    interval: at 7:00am
    steps:
    - print: Good morning!
notify: sends a desktop notification

Optionally, title can be used to set the notification title.

Example:

  mahlzeit:
    interval: at 11:58am
    steps:
    - notify: It's lunch time very soon
      title: Yummy

The notification is supported on the following system:

say: converts text to audible speech

Example:

  vaya-con-dios:
    interval: 0 17 * * 1-5  # every workday late afternoon
    steps:
    - say: Time to go home

The text-to-speech conversion is supported on the following system:

Found a problem or have a new idea? File an issue!

Alternative way to run Berkala (with Node.js)

With Node.js v14 or later (that has npx):

npx @ariya/berkala

To run the development version, check out this repo and then:

npm install
npm start

npm version npm bundle size (minified)