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

# Deploying a node as a service

> Configure your Arc node to run as systemd services that auto-restart and survive reboots.

<View title="v0.7.2 (latest)" icon="tag">
  <Info>
    **v0.7.2: Arc Testnet hardfork activates 2026-06-18 14:00:00 UTC.** The Zero7
    hardfork activates at Unix timestamp `1781791200`. Testnet nodes must be on
    v0.7.2 by that timestamp; earlier versions stop syncing after activation. See
    [Run an Arc node](/arc/tutorials/run-an-arc-node) for those defaults, or
    [CHANGELOG.md](https://github.com/circlefin/arc-node/blob/main/CHANGELOG.md) and
    [BREAKING\_CHANGES.md](https://github.com/circlefin/arc-node/blob/main/BREAKING_CHANGES.md#v072).
  </Info>

  Configure your Arc node's Execution Layer and Consensus Layer as systemd
  services so they auto-restart on failure and survive reboots.

  ## Prerequisites

  * You have installed Arc and completed the
    [Run an Arc node](/arc/tutorials/run-an-arc-node) tutorial with both layers
    syncing
  * You have a Linux machine with systemd
  * You have root or `sudo` access

  <Warning>
    The unit files below reference `$USER` and `$HOME`. The shell expands these to
    your current username and home directory **before** the file is written. After
    running each `sudo tee` command, review the generated unit with
    `sudo cat /etc/systemd/system/arc-execution.service` to confirm the paths are
    correct.
  </Warning>

  ## Step 1: Create the Execution Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-execution.service`:

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-execution.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Execution Layer
  After=network-online.target
  Wants=network-online.target

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  RuntimeDirectory=arc
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-execution node \
    --chain arc-testnet \
    --datadir $HOME/.arc/execution \
    --full \
    --disable-discovery \
    --ipcpath /run/arc/reth.ipc \
    --auth-ipc \
    --auth-ipc.path /run/arc/auth.ipc \
    --http \
    --http.addr 127.0.0.1 \
    --http.port 8545 \
    --http.api eth,net,web3,txpool,trace,debug \
    --metrics 127.0.0.1:9001 \
    --enable-arc-rpc \
    --rpc.forwarder https://rpc.quicknode.testnet.arc.network/

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-execution
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  <Note>
    The service files assume binaries are installed at `/usr/local/bin/`. If you
    installed with `arcup`, the binaries live in `~/.arc/bin/`. Update the
    `ExecStart` paths accordingly, or symlink the binaries into `/usr/local/bin/`.
    If you built from source with `cargo install`, binaries default to
    `~/.cargo/bin/`. Add `--root /usr/local` to `cargo install` to place them under
    `/usr/local/bin/` instead.

    The `RuntimeDirectory=arc` directive automatically creates `/run/arc` owned by
    the `User=` account specified in the service file when the service starts. The
    `--metrics` flag enables the Prometheus endpoint on port 9001. The `--full` flag
    is required on the first start when bootstrapping from a pruned snapshot. Remove
    it on subsequent starts if you prefer to run without pruning.
  </Note>

  ## Step 2: Create the Consensus Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-consensus.service`. The
  `After` and `Requires` directives ensure this service starts only after the
  Execution Layer is running.

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-consensus.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Consensus Layer
  After=arc-execution.service
  Requires=arc-execution.service

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-consensus start \
    --home $HOME/.arc/consensus \
    --full \
    --eth-socket /run/arc/reth.ipc \
    --execution-socket /run/arc/auth.ipc \
    --rpc.addr 127.0.0.1:31000 \
    --follow \
    --follow.endpoint https://rpc.drpc.testnet.arc.network,wss=rpc.drpc.testnet.arc.network \
    --follow.endpoint https://rpc.quicknode.testnet.arc.network,wss=rpc.quicknode.testnet.arc.network \
    --follow.endpoint https://rpc.blockdaemon.testnet.arc.network,wss=rpc.blockdaemon.testnet.arc.network/websocket \
    --execution-persistence-backpressure \
    --execution-persistence-backpressure-threshold=16 \
    --metrics 127.0.0.1:29000

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-consensus
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  ## Step 3: Enable and start the services

  Reload systemd, enable both services to start on boot, and start them:

  ```shell theme={null}
  sudo systemctl daemon-reload
  sudo systemctl enable arc-execution arc-consensus
  sudo systemctl start arc-execution arc-consensus
  ```

  The `enable` command outputs:

  ```text theme={null}
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-execution.service -> /etc/systemd/system/arc-execution.service.
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-consensus.service -> /etc/systemd/system/arc-consensus.service.
  ```

  ## Step 4: Verify the services are running

  Check the status of both services:

  ```shell theme={null}
  sudo systemctl status arc-execution
  sudo systemctl status arc-consensus
  ```

  Each command prints output similar to:

  ```text theme={null}
  ● arc-execution.service - Arc Node - Execution Layer
       Loaded: loaded (/etc/systemd/system/arc-execution.service; enabled)
       Active: active (running) since ...
  ```

  Both services display `Active: active (running)` in their output. If a service
  shows `failed` or `activating`, check its logs:

  ```shell theme={null}
  sudo journalctl -u arc-execution --no-pager -n 50
  sudo journalctl -u arc-consensus --no-pager -n 50
  ```

  **Common issues:**

  * **Incorrect file paths in `ExecStart`:** Verify that the binary paths in the
    unit files match your installation directory.
  * **Permission errors on data directories:** Confirm that the `User` specified
    in the unit file owns `$HOME/.arc/`.
  * **Consensus Layer connection error:** The Execution Layer may not be ready
    yet. Wait for it to reach `active (running)`, then run
    `sudo systemctl restart arc-consensus`.

  To confirm sync progress, view logs, and verify the Prometheus metrics endpoints
  on ports `9001` (Execution Layer) and `29000` (Consensus Layer), see
  [Monitor a node](/arc/tutorials/monitor-a-node). To set up local Prometheus and
  Grafana dashboards on the same host, see
  [Set up Prometheus and Grafana for an Arc node](/arc/tutorials/set-up-node-monitoring).
</View>

<View title="v0.7.1" icon="tag">
  <Info>
    **v0.7.1: Arc Testnet hardfork activates 2026-05-27 15:08:37 UTC.** The Zero5
    and Zero6 hardforks activate at Unix timestamp `1779894517`. Testnet nodes must
    be on v0.7.1 by that timestamp; earlier versions stop syncing after activation.
    The systemd unit files below are unchanged from v0.7.0; v0.7.1 only tightens EL
    RPC connection defaults (`--rpc.max-connections` and
    `--rpc.max-subscriptions-per-connection`). See
    [Run an Arc node](/arc/tutorials/run-an-arc-node) for those defaults, or
    [CHANGELOG.md](https://github.com/circlefin/arc-node/blob/main/CHANGELOG.md) and
    [BREAKING\_CHANGES.md](https://github.com/circlefin/arc-node/blob/main/BREAKING_CHANGES.md#v071)
    for the full upgrade notes.
  </Info>

  Configure your Arc node's Execution Layer and Consensus Layer as systemd
  services so they auto-restart on failure and survive reboots.

  ## Prerequisites

  * You have installed Arc and completed the
    [Run an Arc node](/arc/tutorials/run-an-arc-node) tutorial with both layers
    syncing
  * You have a Linux machine with systemd
  * You have root or `sudo` access

  <Warning>
    The unit files below reference `$USER` and `$HOME`. The shell expands these to
    your current username and home directory **before** the file is written. After
    running each `sudo tee` command, review the generated unit with
    `sudo cat /etc/systemd/system/arc-execution.service` to confirm the paths are
    correct.
  </Warning>

  ## Step 1: Create the Execution Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-execution.service`:

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-execution.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Execution Layer
  After=network-online.target
  Wants=network-online.target

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  RuntimeDirectory=arc
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-execution node \
    --chain arc-testnet \
    --datadir $HOME/.arc/execution \
    --full \
    --disable-discovery \
    --ipcpath /run/arc/reth.ipc \
    --auth-ipc \
    --auth-ipc.path /run/arc/auth.ipc \
    --http \
    --http.addr 127.0.0.1 \
    --http.port 8545 \
    --http.api eth,net,web3,txpool,trace,debug \
    --metrics 127.0.0.1:9001 \
    --enable-arc-rpc \
    --rpc.forwarder https://rpc.quicknode.testnet.arc.network/

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-execution
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  <Note>
    The service files assume binaries are installed at `/usr/local/bin/`. If you
    installed with `arcup`, the binaries live in `~/.arc/bin/`. Update the
    `ExecStart` paths accordingly, or symlink the binaries into `/usr/local/bin/`.
    If you built from source with `cargo install`, binaries default to
    `~/.cargo/bin/`. Add `--root /usr/local` to `cargo install` to place them under
    `/usr/local/bin/` instead.

    The `RuntimeDirectory=arc` directive automatically creates `/run/arc` owned by
    the `User=` account specified in the service file when the service starts. The
    `--metrics` flag enables the Prometheus endpoint on port 9001. The `--full` flag
    is required on the first start when bootstrapping from a pruned snapshot. Remove
    it on subsequent starts if you prefer to run without pruning.
  </Note>

  ## Step 2: Create the Consensus Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-consensus.service`. The
  `After` and `Requires` directives ensure this service starts only after the
  Execution Layer is running.

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-consensus.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Consensus Layer
  After=arc-execution.service
  Requires=arc-execution.service

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-consensus start \
    --home $HOME/.arc/consensus \
    --full \
    --eth-socket /run/arc/reth.ipc \
    --execution-socket /run/arc/auth.ipc \
    --rpc.addr 127.0.0.1:31000 \
    --follow \
    --follow.endpoint https://rpc.drpc.testnet.arc.network,wss=rpc.drpc.testnet.arc.network \
    --follow.endpoint https://rpc.quicknode.testnet.arc.network,wss=rpc.quicknode.testnet.arc.network \
    --follow.endpoint https://rpc.blockdaemon.testnet.arc.network,wss=rpc.blockdaemon.testnet.arc.network/websocket \
    --execution-persistence-backpressure \
    --execution-persistence-backpressure-threshold=16 \
    --metrics 127.0.0.1:29000

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-consensus
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  ## Step 3: Enable and start the services

  Reload systemd, enable both services to start on boot, and start them:

  ```shell theme={null}
  sudo systemctl daemon-reload
  sudo systemctl enable arc-execution arc-consensus
  sudo systemctl start arc-execution arc-consensus
  ```

  The `enable` command outputs:

  ```text theme={null}
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-execution.service -> /etc/systemd/system/arc-execution.service.
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-consensus.service -> /etc/systemd/system/arc-consensus.service.
  ```

  ## Step 4: Verify the services are running

  Check the status of both services:

  ```shell theme={null}
  sudo systemctl status arc-execution
  sudo systemctl status arc-consensus
  ```

  Each command prints output similar to:

  ```text theme={null}
  ● arc-execution.service - Arc Node - Execution Layer
       Loaded: loaded (/etc/systemd/system/arc-execution.service; enabled)
       Active: active (running) since ...
  ```

  Both services display `Active: active (running)` in their output. If a service
  shows `failed` or `activating`, check its logs:

  ```shell theme={null}
  sudo journalctl -u arc-execution --no-pager -n 50
  sudo journalctl -u arc-consensus --no-pager -n 50
  ```

  **Common issues:**

  * **Incorrect file paths in `ExecStart`:** Verify that the binary paths in the
    unit files match your installation directory.
  * **Permission errors on data directories:** Confirm that the `User` specified
    in the unit file owns `$HOME/.arc/`.
  * **Consensus Layer connection error:** The Execution Layer may not be ready
    yet. Wait for it to reach `active (running)`, then run
    `sudo systemctl restart arc-consensus`.

  To confirm sync progress, view logs, and verify the Prometheus metrics endpoints
  on ports `9001` (Execution Layer) and `29000` (Consensus Layer), see
  [Monitor a node](/arc/tutorials/monitor-a-node). To set up local Prometheus and
  Grafana dashboards on the same host, see
  [Set up Prometheus and Grafana for an Arc node](/arc/tutorials/set-up-node-monitoring).
</View>

<View title="v0.7.0" icon="tag">
  <Warning>
    **Upgrade required by 2026-05-27 15:08:37 UTC.** The Zero5 and Zero6 hardforks
    activate at Unix timestamp `1779894517`. The v0.7.0 systemd unit files below
    stop syncing on Arc Testnet after activation. Switch the view at the top of this
    page to **v0.7.1 (latest)** and follow those instructions before the deadline.
    See
    [BREAKING\_CHANGES.md](https://github.com/circlefin/arc-node/blob/main/BREAKING_CHANGES.md#v071)
    for migration details.
  </Warning>

  Configure your Arc node's Execution Layer and Consensus Layer as systemd
  services so they auto-restart on failure and survive reboots.

  ## Prerequisites

  * You have installed Arc and completed the
    [Run an Arc node](/arc/tutorials/run-an-arc-node) tutorial with both layers
    syncing
  * You have a Linux machine with systemd
  * You have root or `sudo` access

  <Warning>
    The unit files below reference `$USER` and `$HOME`. The shell expands these to
    your current username and home directory **before** the file is written. After
    running each `sudo tee` command, review the generated unit with
    `sudo cat /etc/systemd/system/arc-execution.service` to confirm the paths are
    correct.
  </Warning>

  ## Step 1: Create the Execution Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-execution.service`:

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-execution.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Execution Layer
  After=network-online.target
  Wants=network-online.target

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  RuntimeDirectory=arc
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-execution node \
    --chain arc-testnet \
    --datadir $HOME/.arc/execution \
    --full \
    --disable-discovery \
    --ipcpath /run/arc/reth.ipc \
    --auth-ipc \
    --auth-ipc.path /run/arc/auth.ipc \
    --http \
    --http.addr 127.0.0.1 \
    --http.port 8545 \
    --http.api eth,net,web3,txpool,trace,debug \
    --metrics 127.0.0.1:9001 \
    --enable-arc-rpc \
    --rpc.forwarder https://rpc.quicknode.testnet.arc.network/

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-execution
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  <Note>
    The service files assume binaries are installed at `/usr/local/bin/`. If you
    installed with `arcup`, the binaries live in `~/.arc/bin/`. Update the
    `ExecStart` paths accordingly, or symlink the binaries into `/usr/local/bin/`.
    If you built from source with `cargo install`, binaries default to
    `~/.cargo/bin/`. Add `--root /usr/local` to `cargo install` to place them under
    `/usr/local/bin/` instead.

    The `RuntimeDirectory=arc` directive automatically creates `/run/arc` owned by
    the `User=` account specified in the service file when the service starts. The
    `--metrics` flag enables the Prometheus endpoint on port 9001. The `--full` flag
    is required on the first start when bootstrapping from a pruned snapshot. Remove
    it on subsequent starts if you prefer to run without pruning.
  </Note>

  ## Step 2: Create the Consensus Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-consensus.service`. The
  `After` and `Requires` directives ensure this service starts only after the
  Execution Layer is running.

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-consensus.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Consensus Layer
  After=arc-execution.service
  Requires=arc-execution.service

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-consensus start \
    --home $HOME/.arc/consensus \
    --full \
    --eth-socket /run/arc/reth.ipc \
    --execution-socket /run/arc/auth.ipc \
    --rpc.addr 127.0.0.1:31000 \
    --follow \
    --follow.endpoint https://rpc.drpc.testnet.arc.network,wss=rpc.drpc.testnet.arc.network \
    --follow.endpoint https://rpc.quicknode.testnet.arc.network,wss=rpc.quicknode.testnet.arc.network \
    --follow.endpoint https://rpc.blockdaemon.testnet.arc.network,wss=rpc.blockdaemon.testnet.arc.network/websocket \
    --execution-persistence-backpressure \
    --execution-persistence-backpressure-threshold=16 \
    --metrics 127.0.0.1:29000

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-consensus
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  ## Step 3: Enable and start the services

  Reload systemd, enable both services to start on boot, and start them:

  ```shell theme={null}
  sudo systemctl daemon-reload
  sudo systemctl enable arc-execution arc-consensus
  sudo systemctl start arc-execution arc-consensus
  ```

  The `enable` command outputs:

  ```text theme={null}
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-execution.service -> /etc/systemd/system/arc-execution.service.
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-consensus.service -> /etc/systemd/system/arc-consensus.service.
  ```

  ## Step 4: Verify the services are running

  Check the status of both services:

  ```shell theme={null}
  sudo systemctl status arc-execution
  sudo systemctl status arc-consensus
  ```

  Each command prints output similar to:

  ```text theme={null}
  ● arc-execution.service - Arc Node - Execution Layer
       Loaded: loaded (/etc/systemd/system/arc-execution.service; enabled)
       Active: active (running) since ...
  ```

  Both services display `Active: active (running)` in their output. If a service
  shows `failed` or `activating`, check its logs:

  ```shell theme={null}
  sudo journalctl -u arc-execution --no-pager -n 50
  sudo journalctl -u arc-consensus --no-pager -n 50
  ```

  **Common issues:**

  * **Incorrect file paths in `ExecStart`:** Verify that the binary paths in the
    unit files match your installation directory.
  * **Permission errors on data directories:** Confirm that the `User` specified
    in the unit file owns `$HOME/.arc/`.
  * **Consensus Layer connection error:** The Execution Layer may not be ready
    yet. Wait for it to reach `active (running)`, then run
    `sudo systemctl restart arc-consensus`.

  To confirm sync progress, view logs, and verify the Prometheus metrics endpoints
  on ports `9001` (Execution Layer) and `29000` (Consensus Layer), see
  [Monitor a node](/arc/tutorials/monitor-a-node). To set up local Prometheus and
  Grafana dashboards on the same host, see
  [Set up Prometheus and Grafana for an Arc node](/arc/tutorials/set-up-node-monitoring).
</View>

<View title="v0.6.0" icon="tag">
  <Warning>
    **Upgrade required by 2026-05-27 15:08:37 UTC.** The Zero5 and Zero6 hardforks
    activate at Unix timestamp `1779894517`. v0.6.0 is two releases behind and stops
    syncing on Arc Testnet after activation. Switch the view at the top of this page
    to **v0.7.1 (latest)** and follow those instructions before the deadline. See
    [BREAKING\_CHANGES.md](https://github.com/circlefin/arc-node/blob/main/BREAKING_CHANGES.md#v071)
    for migration details.
  </Warning>

  Configure your Arc node's Execution Layer and Consensus Layer as systemd
  services so they auto-restart on failure and survive reboots.

  ## Prerequisites

  * You have installed Arc and completed the
    [Run an Arc node](/arc/tutorials/run-an-arc-node) tutorial with both layers
    syncing
  * You have a Linux machine with systemd
  * You have root or `sudo` access

  <Warning>
    The unit files below reference `$USER` and `$HOME`. The shell expands these to
    your current username and home directory **before** the file is written. After
    running each `sudo tee` command, review the generated unit with
    `sudo cat /etc/systemd/system/arc-execution.service` to confirm the paths are
    correct.
  </Warning>

  ## Step 1: Create the Execution Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-execution.service`:

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-execution.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Execution Layer
  After=network-online.target
  Wants=network-online.target

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  RuntimeDirectory=arc
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-execution node \
    --chain arc-testnet \
    --datadir $HOME/.arc/execution \
    --disable-discovery \
    --ipcpath /run/arc/reth.ipc \
    --auth-ipc \
    --auth-ipc.path /run/arc/auth.ipc \
    --http \
    --http.addr 127.0.0.1 \
    --http.port 8545 \
    --http.api eth,net,web3,txpool,trace,debug \
    --metrics 127.0.0.1:9001 \
    --enable-arc-rpc \
    --rpc.forwarder https://rpc.quicknode.testnet.arc.network/

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-execution
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  <Note>
    The service files assume binaries are installed at `/usr/local/bin/`. If you
    built from source with `cargo install`, binaries default to `~/.cargo/bin/`. Add
    `--root /usr/local` to `cargo install` to place them under `/usr/local/bin/`
    instead.

    The `RuntimeDirectory=arc` directive automatically creates `/run/arc` owned by
    the `User=` account specified in the service file when the service starts. The
    `--metrics` flag enables the Prometheus endpoint on port 9001.
  </Note>

  ## Step 2: Create the Consensus Layer unit file

  Write the systemd unit file to `/etc/systemd/system/arc-consensus.service`. The
  `After` and `Requires` directives ensure this service starts only after the
  Execution Layer is running.

  ```shell theme={null}
  sudo tee /etc/systemd/system/arc-consensus.service > /dev/null <<EOF
  [Unit]
  Description=Arc Node - Consensus Layer
  After=arc-execution.service
  Requires=arc-execution.service

  [Service]
  Type=simple
  User=$USER
  Group=$USER
  Environment=RUST_LOG=info
  WorkingDirectory=$HOME/.arc
  ExecStart=/usr/local/bin/arc-node-consensus start \
    --home $HOME/.arc/consensus \
    --eth-socket /run/arc/reth.ipc \
    --execution-socket /run/arc/auth.ipc \
    --rpc.addr 127.0.0.1:31000 \
    --follow \
    --follow.endpoint https://rpc.drpc.testnet.arc.network,wss=rpc.drpc.testnet.arc.network \
    --follow.endpoint https://rpc.quicknode.testnet.arc.network,wss=rpc.quicknode.testnet.arc.network \
    --follow.endpoint https://rpc.blockdaemon.testnet.arc.network,wss=rpc.blockdaemon.testnet.arc.network \
    --metrics 127.0.0.1:29000

  Restart=always
  RestartSec=10
  KillSignal=SIGTERM
  TimeoutStopSec=300
  StandardOutput=journal
  StandardError=journal
  SyslogIdentifier=arc-consensus
  LimitNOFILE=1048576

  [Install]
  WantedBy=multi-user.target
  EOF
  ```

  ## Step 3: Enable and start the services

  Reload systemd, enable both services to start on boot, and start them:

  ```shell theme={null}
  sudo systemctl daemon-reload
  sudo systemctl enable arc-execution arc-consensus
  sudo systemctl start arc-execution arc-consensus
  ```

  The `enable` command outputs:

  ```text theme={null}
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-execution.service -> /etc/systemd/system/arc-execution.service.
  Created symlink /etc/systemd/system/multi-user.target.wants/arc-consensus.service -> /etc/systemd/system/arc-consensus.service.
  ```

  ## Step 4: Verify the services are running

  Check the status of both services:

  ```shell theme={null}
  sudo systemctl status arc-execution
  sudo systemctl status arc-consensus
  ```

  Each command prints output similar to:

  ```text theme={null}
  ● arc-execution.service - Arc Node - Execution Layer
       Loaded: loaded (/etc/systemd/system/arc-execution.service; enabled)
       Active: active (running) since ...
  ```

  Both services display `Active: active (running)` in their output. If a service
  shows `failed` or `activating`, check its logs:

  ```shell theme={null}
  sudo journalctl -u arc-execution --no-pager -n 50
  sudo journalctl -u arc-consensus --no-pager -n 50
  ```

  **Common issues:**

  * **Incorrect file paths in `ExecStart`:** Verify that the binary paths in the
    unit files match your installation directory.
  * **Permission errors on data directories:** Confirm that the `User` specified
    in the unit file owns `$HOME/.arc/`.
  * **Consensus Layer connection error:** The Execution Layer may not be ready
    yet. Wait for it to reach `active (running)`, then run
    `sudo systemctl restart arc-consensus`.

  To confirm sync progress, view logs, and verify the Prometheus metrics endpoints
  on ports `9001` (Execution Layer) and `29000` (Consensus Layer), see
  [Monitor a node](/arc/tutorials/monitor-a-node). To set up local Prometheus and
  Grafana dashboards on the same host, see
  [Set up Prometheus and Grafana for an Arc node](/arc/tutorials/set-up-node-monitoring).
</View>
