# Workers and cron jobs

Run more processes from the same app: **workers** that run all the time, such as a queue consumer or a bot, and **cron jobs** that run on a schedule, such as a nightly report.

They use the app's current build and its variables (including `DATABASE_URL`), each instance in its own microVM, and their output appears in the app's logs, labelled with the process name. A new deploy updates them too.

## Add one

In the dashboard, open the app's **Workers & cron** tab, or use the CLI:

```sh
$ deplane processes add emails --command "node emails.js"
$ deplane processes add nightly --command "node report.js" --schedule "0 3 * * *"
```

The command runs through the image's shell (`/bin/sh -c`).

## Schedules

Five fields in UTC: minute, hour, day of month, month, day of week (0 to 6, 0 is Sunday). For example `*/15 * * * *` (every 15 minutes), `0 3 * * *` (every day at 03:00), `30 9 * * 1-5` (weekdays at 09:30), or `@hourly`, `@daily`, `@weekly`, `@monthly`.

A cron job runs one instance at a time (a run that is still going when the next is due is skipped), for at most an hour, and a failed run is not retried.

## Limits

Up to 10 workers and cron jobs per app. Workers count against your plan's instances and memory; a cron job counts as one instance of its size. Set a worker to 0 instances to pause it.
