> ## Documentation Index
> Fetch the complete documentation index at: https://docs.symplax.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cron jobs

> Run commands on a schedule inside your app's own container, with each run's output recorded.

![](https://mintcdn.com/symplax/Ze_dk1wGN74zOB0C/images/buddy-scheduling.webp?fit=max\&auto=format\&n=Ze_dk1wGN74zOB0C\&q=85\&s=f733022c93adbe6b81612684d4810246)

A cron job runs a command on a schedule inside your app's running container. It has your app's code, dependencies and environment variables, so a job can be as simple as running one of your own scripts.

```bash theme={null}
node scripts/send-digest.js
```

## Plan limits

| Plan | Cron jobs |
| - | - |
| Free | Not available |
| Pro | 5 |
| Team | Unlimited |

The Pro limit counts every job you have created, across all of your apps. See [Plans](https://docs.symplax.com/billing/plans.md).

## Create a job

**1. Open Cron Jobs**

Open your app and go to the **Cron Jobs** tab. Click **Add cron job**.

**2. Enter a name and command**

Give the job a name and type the **Command** to run. It runs with `sh -c` inside the container, from the container's working directory.

**3. Choose a schedule**

Pick a preset or type a standard five-field cron expression. Expressions with seconds are not accepted.

**4. Create it**

Click **Create Job**. Symplax installs the schedule on your server.

The presets are:

| Preset | Expression |
| - | - |
| Every minute | `* * * * *` |
| Hourly | `0 * * * *` |
| Daily | `0 0 * * *` |
| Weekly | `0 0 * * 0` |
| Monthly | `0 0 1 * *` |

> [!NOTE]
>
> Schedules run on your server's clock. Check your server's time zone before choosing a time of day.

## How jobs run

Symplax writes each job into the cron daemon on your server. When it fires, it runs your command inside the app's container with `docker exec`, then reports the result back to Symplax.

* The job always runs in the current container. After a deploy, it runs against the new version with no changes from you.
* If the container is not running when the job fires, that run fails.
* Each run records its start time, finish time, whether it succeeded, and up to 8,000 characters of output.
* The last 50 runs of each job are shown in the **Cron Jobs** tab.

## Pause, edit or delete a job

* **Pause** stops the job from running without deleting it. Click **Resume** to start it again. A paused job still counts towards your plan limit.
* **Edit** changes the name, command or schedule.
* **Delete** removes the job from your server and frees its slot.

> [!NOTE]
>
> Cron jobs are managed by the person who created the app, while they still have Developer access or higher to its server.

## Good to know

* An app is one container, so a job shares its memory and CPU with the app. Keep heavy jobs to quiet hours.
* Long-running workers that never exit are not a fit for cron. Symplax does not run background worker apps yet, because every app must serve HTTP.
* For a one-off task on each deploy, such as migrations, use a [release command](https://docs.symplax.com/apps/release-commands.md) instead.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.