---
title: Jobs
description: A container run on a schedule, with every run's verdict and log kept.
order: 6
---

A job runs a command on a schedule, in one environment. Each run is its own container,
and its exit code and log are kept after the container is gone.

## Adding one

Open **Jobs** and choose **Add job**:

| field | what it does |
| --- | --- |
| Schedule | a five field cron expression in UTC, such as `0 3 * * *` for 03:00 every day |
| Command | the command and its arguments |
| Service | a service of the environment whose current image the job runs |
| Image | or an image pinned by digest, `registry/project/name@sha256:...` |
| Env group | the secret group the run gets |
| Limits | default half a core and 512 MB |
| Timeout | 10 to 86400 seconds |

Name a service or an image, not both. A job that runs in a service's image picks up each
new deploy of that service by itself.

## Running and pausing

The job's page lists its runs with their exit code and log. **Run now** starts a run at
once, and **Pause** stops the schedule until you **Resume** it.

## Steps are not jobs

A step in [the project file](../concepts/project-file.md#steps-and-hooks) is a command
without a schedule, run by a hook after a build or a deploy, such as a migration.
