---
name: "rcctl"
section: "8"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["openbsd"]
url: "https://new.carta.tech/rcctl"
---

# rcctl(8)

configure and control daemons and services

## NAME

**rcctl** – configure and control daemons and services

## SYNOPSIS

**rcctl** **get**\|**getdef**\|**set** *daemon*\|*service* \[*variable* \[*argument* *...*\]\]

**rcctl** \[**-d** \| **-q**\] \[**-f**\] **check**\|**configtest**\|**reload**\|**restart**\|**start**\|**stop** *daemon* *...*

**rcctl** **disable**\|**enable**\|**order** \[*daemon* *...*\]

**rcctl** **ls** **all**\|**failed**\|**off**\|**on**\|**rogue**\|**started**\|**stopped**

## DESCRIPTION

The **rcctl** utility can enable or disable a base system *service* or a base system or package *daemon* in rc.conf.local(8) or display its configuration and status. For a *daemon*, it can also change the command line arguments, the user to run as, the [rc.d(8)](/rc.d/8.md) action timeout or call its [rc.d(8)](/rc.d/8.md) *daemon* control script.

The following commands are available( *variable* can be one of **class**, **execdir**, **flags**, **logger**, **rtable**, **status**, **timeout** or **user**):

- \[**-d** \| **-q**\] \[**-f**\] *action* *daemon* *...*

  Run the [rc.d(8)](/rc.d/8.md) *daemon* scripts with the *action* argument, passing through the specified options, if any.

- **disable** *service* *...* \| *daemon* *...*

  Alias for **set** *service*\|*daemon* **status** **off**.

- **enable** *service* *...* \| *daemon* *...*

  Alias for **set** *service*\|*daemon* **status** **on**.

- **get** *service* \| *daemon* \[*variable*\]

  Display the value of *service* or *daemon*\_*variable*. If *variable* is empty, display all *service* or *daemon* variables and values in a format compatible with [rc.conf(8)](/rc.conf/8.md). When *daemon* is set to "all", *variable* must not be set and **rcctl** will display all services and daemons variables.

- **getdef** *service* \| *daemon* \[*variable*\]

  Like **get** but returns the default values.

- **ls** *lsarg*

  Display a list of services and daemons matching *lsarg*, which can be one of:

  - **all**

    all services and daemons

  - **failed**

    enabled but stopped daemons

  - **off**

    disabled services and daemons

  - **on**

    enabled services and daemons

  - **rogue**

    daemons which are disabled but currently running

  - **started**

    running daemons

  - **stopped**

    stopped daemons

- **order** \[*daemon* *...*\]

  Move the specified package daemons to the beginning of *pkg\_scripts*. They need to be already enabled. If no *daemon* is specified, display the current order.

  The **order** command is only needed after enabling a new daemon that needs to run before one or more already enabled daemons. Specify the new daemon preceded by all that need to run before it, but not the ones depending on it.

- **set** *service* \| *daemon* *variable* \[*argument* *...*\]

  For a daemon, set the variable *daemon*\_*variable* to the specified arguments. If *variable* is already set, *daemon*\_*variable* is reset to the optionally provided arguments or to its default value.

  The **status** *variable* must be provided with the **on** or **off** arguments. It is used to enable or disable *service* or *daemon* in rc.conf.local(8). When a disabled package daemon is enabled, it is appended to the end of *pkg\_scripts*. When a package daemon is disabled, it is removed from *pkg\_scripts* and its variables are removed if any.

## EXIT STATUS

**rcctl** *action* returns with the exit status of the [rc.d(8)](/rc.d/8.md) *daemon* script. **rcctl** **get** *daemon* \| *service* \[**status**\] exits with 0 if the daemon or service is enabled and 1 if it is not. **rcctl** **getdef** *daemon* \| *service* \[**status**\] exits with 0 if the daemon or service is enabled by default and 1 if it is not. **rcctl** **ls** **failed** \| **rogue** exits with 1 if an enabled daemon is not running or vice versa. Otherwise, the **rcctl** utility exits with 0 on success, and \>0 if an error occurs (2 indicates a non-existent *daemon* \| *service*).

## EXAMPLES

Enable and set [apmd(8)](/apmd/8.md) flags:

```
# rcctl set apmd status on
# rcctl set apmd flags -A
# rcctl get apmd
apmd_class=daemon
apmd_execdir=
apmd_flags=-A
apmd_logger=
apmd_rtable=0
apmd_timeout=30
apmd_user=root
# echo $?
0
```

The recommended way to run a second copy of a given daemon for a different purpose is to create a symbolic link to its [rc.d(8)](/rc.d/8.md) control script:

```
# ln -s /etc/rc.d/snmpd /etc/rc.d/snmpd6
# rcctl set snmpd6 status on
# rcctl set snmpd6 flags -D addr=2001:db8::1234
# rcctl start snmpd6
```

## SEE ALSO

rc.conf.local(8), [rc.d(8)](/rc.d/8.md)

## HISTORY

**rcctl** first appeared in OpenBSD 5.7.

## AUTHORS

**rcctl** was written by Antoine Jacoutot ⟨*ajacoutot@openbsd.org*⟩.
