# Runners

> Create, edit, duplicate, pause, resume, delete and remove runners in the dashboard.

Source: https://managerunners.com/docs/manual/runners/

The **Dashboard** lists the runners of the selected [organization](https://managerunners.com/docs/manual/organizations/) as cards. Each card shows the runner's state, chip, vCPUs, RAM, disk, concurrency, executor, IPv4 and IPv6 addresses (select one to copy it), location and Hetzner's monthly price. Use the filters above the list to narrow it down by status, executor or location, or search by name.

![The dashboard with an active and a paused runner](https://managerunners.com/docs/screenshots/dashboard-light.webp)

Owners and editors can change runners. Viewers see the list without actions and a **View only** badge. The dashboard needs an active plan; without one it opens **Billing**.

## Create a runner

Select **Create Runner**, fill in the form and select **Create**. The [quick start](https://managerunners.com/docs/quickstart/#5-create-the-runner) explains every field. Some rules:

- **Name:** letters, numbers, spaces and dashes only. Other characters are removed as you type.
- **Product and location:** choose the product first; the location list then shows where Hetzner offers it and at what price. Locations where it is unavailable are disabled.
- **Concurrency:** at least 1. Selecting a product sets it to twice the vCPU count.
- **Tokens:** the [GitLab runner authentication token](https://managerunners.com/docs/manual/gitlab/) and a [Hetzner API token](https://managerunners.com/docs/manual/hetzner/) with read and write access.
- **Resource monitoring:** on by default when your organization's plan is active. See [Monitoring](https://managerunners.com/docs/manual/monitoring/).

The runner appears as **Creating**, then **Configuring**, then **Active**. The dashboard refreshes the list while any runner is changing state.

## Edit a runner

Select **Edit** on the card, change the settings and select **Save changes**.

- **Location** cannot be changed, because that would change the runner's IP addresses. To move a runner, create a new one in the other location.
- **Product** offers only server types that are available in the runner's location.
- **Tokens** show as `********`. Leave a token field empty to keep the stored token.

> Changing the product, GitLab host, GitLab token, concurrency, executor, SSH keys or monitoring of an active runner deletes its server and creates a new one. Running jobs are interrupted. Changing the name, labels or Hetzner token does not. See [Changes that recreate the server](https://managerunners.com/docs/manual/concepts/#changes-that-recreate-the-server).

## Duplicate a runner

Select **Duplicate** to create a copy with the same product, location, executor, concurrency, GitLab host and token, Hetzner token, SSH keys, labels and monitoring setting. The copy's name gets a number, for example `build-01 2`. It starts as a new runner and creates its own server and IP addresses.

You can duplicate active and paused runners. **Duplicate** is disabled when Hetzner no longer offers the runner's server type in its location.

## Pause and resume

**Pause** deletes the runner's server. The runner keeps its configuration and its IPv4 and IPv6 addresses, and Hetzner stops billing for the server. Jobs running at that moment are interrupted.

**Resume** creates a new server with the same configuration and addresses. The runner goes through **Creating** and **Configuring** again before it is **Active**. Because the server is new, nothing from its previous disk remains.

If Hetzner no longer offers the server type in the runner's location, **Resume** is disabled, and the card warns you before you pause a runner that could not be resumed. If Hetzner cannot create the server when you resume, for example because of capacity problems, the runner stays paused and the card shows the error. Try again later, or [edit](#edit-a-runner) the runner to use another server type.

To pause and resume on a timetable, use a [schedule](https://managerunners.com/docs/manual/schedules/).

## Delete a runner

Select **Delete**, then select it again to confirm. Manage Runners deletes the server, the runner's IP addresses and its schedule.

If Hetzner does not confirm that the server was deleted, the runner is kept and the card shows an error, so you can try again. A server that no longer exists at Hetzner counts as deleted.

Deleting a runner does not remove it from GitLab. [Delete it in GitLab](https://managerunners.com/docs/manual/gitlab/#removing-a-runner-from-gitlab) when you no longer need it.

## Remove an Unknown runner

A runner in the **Unknown** state cannot be deleted normally, because Manage Runners does not know whether its server still exists. Selecting **Delete** on it opens **Delete Unknown Runner**, which only removes the runner from the dashboard:

> If you delete an unknown runner, the ip and hetzner server will not be deleted.

After you confirm, check the Hetzner Console and delete the server and its primary IPs there if they still exist. Before you remove an Unknown runner, see whether [editing it can recover it](https://managerunners.com/docs/manual/troubleshooting/#a-runner-is-unknown).

## When actions are unavailable

| Action | Unavailable while the runner is |
| --- | --- |
| Duplicate, Pause, Resume | Creating, Unknown, or while a pause is in progress |
| Delete | Creating, or while a pause is in progress |
| Edit | Invalid Gitlab Token (use **Fix** instead) |

Only one lifecycle action runs on a runner at a time. If you start another one, it fails with a message that the runner is locked. Wait until the first action has finished.
