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

# Schedules

> Start an instance or a job later from the terminal, once or on a repeating cron schedule.

export const RuncrateStyles = () => {
  if (typeof document !== 'undefined' && !document.getElementById('runcrate-overrides')) {
    const s = document.createElement('style');
    s.id = 'runcrate-overrides';
    s.textContent = `
      /* Match Runcrate's rounding scale (--radius: 0.75rem) */
      .rounded-sm { border-radius: 0.5rem !important; }   /* 8px */
      .rounded-md { border-radius: 0.625rem !important; } /* 10px */
      .rounded-lg { border-radius: 0.75rem !important; }  /* 12px */
      .rounded-l-sm { border-top-left-radius: 0.5rem !important; border-bottom-left-radius: 0.5rem !important; }
      .rounded-r-sm { border-top-right-radius: 0.5rem !important; border-bottom-right-radius: 0.5rem !important; }
      .rounded-l-md { border-top-left-radius: 0.625rem !important; border-bottom-left-radius: 0.625rem !important; }
      .rounded-r-md { border-top-right-radius: 0.625rem !important; border-bottom-right-radius: 0.625rem !important; }
      .rounded-l-lg { border-top-left-radius: 0.75rem !important; border-bottom-left-radius: 0.75rem !important; }
      .rounded-r-lg { border-top-right-radius: 0.75rem !important; border-bottom-right-radius: 0.75rem !important; }

      /* Cards: never pure white in light mode */
      .card { background-color: #fcfcfc !important; border-radius: 0.75rem !important; }
      html.dark .card { background-color: #141414 !important; }

      /* Docs hero box */
      .rc-hero { background-color: #fcfcfc; border: 1px solid #e0e0e0; }
      html.dark .rc-hero { background-color: #141414; border-color: #242424; }
      html.dark .rc-hero h1 { color: #f5f5f5; }

      /* Runcrate scrollbar — thin, transparent track, hide-until-hover thumb */
      ::-webkit-scrollbar { width: 6px; height: 6px; background-color: transparent; }
      ::-webkit-scrollbar-track { background-color: transparent; }
      ::-webkit-scrollbar-thumb { background-color: rgba(155, 155, 155, 0.5); border-radius: 10px; transition: opacity 0.3s ease; opacity: 0; }
      ::-webkit-scrollbar-thumb:hover { background-color: rgba(155, 155, 155, 0.7); }
      *:hover::-webkit-scrollbar-thumb,
      *:focus::-webkit-scrollbar-thumb,
      *:active::-webkit-scrollbar-thumb { opacity: 1; }
      * { scrollbar-width: thin; scrollbar-color: rgba(155, 155, 155, 0.5) transparent; }
    `;
    document.head.appendChild(s);
  }
  return null;
};

<RuncrateStyles />

`runcrate schedule` starts an instance or a [job](/docs/cli/jobs) for you later: once with `--at`, or repeating with `--cron`. Runs start within about 2 minutes of their time. See [Schedules](/docs/schedules/overview) for how runs, skips and notifications work.

### Create a schedule

```bash theme={"theme":{"light":"github-light","dark":"catppuccin-mocha"}}
# A job every night at 02:00 London time, for at most 2 hours
runcrate schedule create --cron '0 2 * * *' --tz Europe/London --name nightly-train \
  --gpu H100 --volume <volume-id> --max-runtime 2h -- python train.py

# A job on weekdays at 09:00, passing a secret from your shell
runcrate schedule create --cron '0 9 * * 1-5' --gpu A4000 --max-runtime 90m \
  --env HF_TOKEN -- python eval.py

# An instance once, tomorrow at 09:00 New York time, stopped after 8 hours
runcrate schedule create --at '2026-10-21 09:00' --tz America/New_York \
  --name demo-box --gpu A100 --max-runtime 8h
```

A command after `--` makes it a job schedule, joined and quoted the same way as [`runcrate run`](/docs/cli/jobs#run-a-command). Without a command it is an instance schedule, and `--name` is required.

The command is visible to everyone in the workspace, so pass tokens with `--env` (or keep them in your environment's secrets), never inside the command.

`create` prints the schedule id and its next run.

### When it runs

| Flag | Description |
| - | - |
| `--at` | Run once. `'2026-10-21 02:00'` or `'2026-10-21T02:00'` (seconds optional) is that wall time in `--tz`. A time with an offset or `Z`, such as `'2026-10-21T02:00:00+01:00'`, is used as is. In the future, at most 365 days ahead. |
| `--cron` | Repeat on a 5-field cron expression (`minute hour day-of-month month day-of-week`), read in `--tz`. Runs must be at least 15 minutes apart. |
| `--tz` | IANA timezone, for example `Europe/London`. Default: this machine's timezone. |
| `--overlap` | `skip` (default) or `allow`. With `skip`, a run is skipped while the previous run is still live. `--cron` only. |

Use exactly one of `--at` and `--cron`. A time skipped by a daylight saving change moves forward by the gap (02:30 runs at 03:30); a time that happens twice runs once, the first time.

### What it starts

| Flag | Description |
| - | - |
| `--max-runtime` | Required. A duration such as `90m`, `2h` or `1h30m`, in whole minutes. Jobs 1m to 24h (bare minutes such as `90` also work), instances 5m to 168h. |
| `--name` | Names the schedule and the instance or job it starts. Required for instances. |
| `--gpu` | GPU type, for example `H100`, or `H100:2` for two. See `runcrate instances types`. |
| `--gpu-count` | GPUs on the machine. |
| `--region` | Preferred region. |
| `--template` | OS template. See `runcrate templates`. |
| `--type-id` | Instances only. Exact instance type id from `runcrate instances types`. |
| `--idle-stop` | Instances only. Stop the instance after it has been idle this long: `30m`, `1h30m`, 5m to 24h. |
| `--volume` | Jobs only. Volume id, mounted at `/workspace`. |
| `--image` | Jobs only. Container image to run the command in. |
| `--env` | Jobs only. `KEY=VALUE`, or `KEY` to pass the value from your shell. Repeat for more. Values are never shown again. |

### List schedules

```bash theme={"theme":{"light":"github-light","dark":"catppuccin-mocha"}}
runcrate schedule list          # ID, name, kind, when, next run, last result, enabled
runcrate schedule list -q       # IDs only
runcrate schedule list --json
```

Next runs are shown in your local time. `--json` works on every `schedule` command.

### Inspect a schedule

```bash theme={"theme":{"light":"github-light","dark":"catppuccin-mocha"}}
runcrate schedule get <schedule-id>
```

### Pause, resume and run now

```bash theme={"theme":{"light":"github-light","dark":"catppuccin-mocha"}}
runcrate schedule pause <schedule-id>     # No more runs until resumed
runcrate schedule resume <schedule-id>    # Next occurrence from now
runcrate schedule run-now <schedule-id>   # Launch once now, paused or not
```

`run-now` does not move the next run. A one-off resumes only if its time is still in the future.

### Delete a schedule

```bash theme={"theme":{"light":"github-light","dark":"catppuccin-mocha"}}
runcrate schedule delete <schedule-id>
runcrate schedule delete <schedule-id> --yes   # Skip the prompt
```

Instances and jobs it already started keep running. To change when a schedule runs, delete it and create it again.


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