Skip to main content
v0.8.0 upgrade required. Testnet operators must upgrade before timestamp 1788447600 (2026-09-03 15:00:00 UTC), when Zero8 activates. Mainnet operators must upgrade before timestamp 1789052400 (2026-09-10 15:00:00 UTC), when Zero7/Zero8 activate. Earlier versions are not supported after those timestamps.This release includes breaking changes. See CHANGELOG.md and BREAKING_CHANGES.md for migration details before upgrading.
Configure your Arc node’s Execution Layer and Consensus Layer as systemd services so they auto-restart on failure and survive reboots.

Prerequisites

Before you begin, ensure that you’ve:
  • Installed Arc and completed the Run an Arc node tutorial with both layers syncing
  • Prepared a Linux machine with systemd
  • Obtained root or sudo access
The unit files in the following steps 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.

Step 1: Create the Execution Layer unit file

Write the systemd unit file to /etc/systemd/system/arc-execution.service. The unit file targets mainnet. For testnet, replace --chain arc-mainnet with --chain arc-testnet and --rpc.forwarder https://rpc.mainnet.arc.io/ with --rpc.forwarder https://rpc.testnet.arc.io/.
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. When --full is used, EL pruning runs on a 128-block interval (changed from 5000 in v0.7.3); pass --prune.block-interval=5000 explicitly to retain the previous schedule.

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. The unit file targets mainnet. For testnet, replace the mainnet follow endpoints with the corresponding testnet endpoints listed in node requirements.

Step 3: Enable and start the services

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

Step 4: Verify the services are running

Check the status of both services:
Each command prints output similar to:
Both services display Active: active (running) in their output. If a service shows failed or activating, check its logs:
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. To set up local Prometheus and Grafana dashboards on the same host, see Set up Prometheus and Grafana for an Arc node.