nimbus-eth2/docs/the_nimbus_book/src/beacon-node-systemd.md

146 lines
6.1 KiB
Markdown

# Set up a systemd service
This page will take you through how to set up a `systemd` service for your beacon node.
`systemd` is used in order to have a command or a program run when your device boots (i.e. add it as a service).
Once this is done, you can start/stop enable/disable from the linux prompt.
!!! abstract "`systemd`"
[`systemd`](https://systemd.io/) is a service manager designed specifically for Linux: it cannot be used on Windows / Mac.
You can find out more about `systemd` [here](https://fedoramagazine.org/what-is-an-init-system/).
!!! note "Package manager installations"
When installing Nimbus via your [package manager](./binaries.md), a user and service will already have been created for you and you can skip straight to the configuration section.
### 1. Create a dedicated user
We will start by creating a dedicated user and [data directory](./data-dir.md) for Nimbus.
The same user can also be used for the execution client.
```sh
# Create the `nimbus` group
sudo groupadd nimbus
# Create the `nimbus` user in the `nimbus` group - we will use /var/lib/nimbus as data directory.
sudo useradd -g nimbus nimbus -m -d /var/lib/nimbus
```
### 2. Create the service file
`systemd` services are created by placing a [service](https://www.freedesktop.org/software/systemd/man/systemd.service.html) file in `/etc/systemd/system`, or, if Nimbus was installed by a package manager, `/usr/lib/systemd/system`.
A good starting point is the [example service file](https://raw.githubusercontent.com/status-im/nimbus-eth2/stable/scripts/package_src/nimbus_beacon_node/image/lib/systemd/system/nimbus_beacon_node.service) in the Nimbus repository.
```sh
# Download example service file and save it to `/etc/systemd/system/nimbus_beacon_node.service`
curl -s https://raw.githubusercontent.com/status-im/nimbus-eth2/stable/scripts/package_src/nimbus_beacon_node/image/lib/systemd/system/nimbus_beacon_node.service | sudo tee /etc/systemd/system/nimbus_beacon_node.service > /dev/null
```
The format of service files is documented in the [systemd manual](https://www.freedesktop.org/software/systemd/man/systemd.service.html).
!!! tip
Automatic restarts increase the risk that the doppelganger detection fails - set `RestartPreventExitStatus=129` to prevent this from happening
### 3. Configure your service
Services are configured either by editing the service file directly or using `systemctl edit` to create an override.
```sh
# Edit the systemd file to match your installation
sudo vi /etc/systemd/system/nimbus_beacon_node.service
# If you installed nimbus via the package manager, use `systemctl edit` instead
sudo systemctl edit nimbus_beacon_node.service
```
The service file contains several options for controlling Nimbus.
Important options include:
* `Environment=NETWORK`: set this to `mainnet`, `prater` or `sepolia`, depending on which network you want to connect to
* `Environment=WEB3_URL`: point this to your execution client, see the [Execution Client](./eth1.md) setup guide
* `Environment=REST_ENABLED`: REST is used to interact with the beacon node, in particular when setting up a separate Validator Client, see the [REST API](./rest-api.md) guide
* `Environment=METRICS_ENABLED`: metrics are used for monitoring the node, see the [metrics](./metrics-pretty-pictures.md) setup guide
* `ExecStart=`: custom options, see the [options](./options.md) guide
!!! note
The example assumes Nimbus was installed in `/usr/bin/nimbus_beacon_node`.
If you installed Nimbus elsewhere, make sure to update this path.
### 4. Notify systemd of the newly added service
Every time you add or update a service, the `systemd` daemon must be notified of the changes:
```sh
sudo systemctl daemon-reload
```
### 4. Start the service
```sh
# start the beacon node
sudo systemctl start nimbus_beacon_node
# (Optional) Set the beacon node to start automatically at boot
sudo systemctl enable nimbus_beacon_node
```
### 5. Check the status of the service
`systemctl status` will show if your beacon node is up and running, or has stopped for some reason.
```sh
sudo systemctl status nimbus_beacon_node.service
```
You can also follow the logs using the following command:
```sh
sudo journalctl -uf nimbus_beacon_node.service
```
This will show you the Nimbus logs at the default setting — it should include regular "slot start" messages which will show your [sync progress](./keep-an-eye.md#keep-track-of-your-syncing-progress).
Press `ctrl-c` to stop following the logs.
To rewind logs — by one day, say — run:
```sh
sudo journalctl -u nimbus_beacon_node.service --since yesterday
```
## Import validator keys
Before you start, familiarize yourself with the [standard way of importing validators](./keys.md).
Make sure you use the correct [data directory](./data-dir.md).
Look for the `--data-dir` option in the `.service` file.
When using a service, the beacon node is running as a different user.
Look for the `User=` option in the `.service`.
Here we assume that the user is called `nimbus`.
The key import must be performed as this user in order for the key files to have the correct permission:
```
# Run import command as the `nimbus` user
sudo -u nimbus /usr/bin/nimbus_beacon_node deposits import --data-dir=/var/lib/nimbus/shared_mainnet_0 /path/to/keys
```
!!! note
Make sure to use the same `--data-dir` option as is used in the service file!
Some guides use `--data-dir=/var/lib/nimbus` instead.
## Running multiple beacon nodes
You can run multiple beacon nodes on the same machine simply by copying the `.service` file and adjusting the parameters.
When running multiple beacon nodes, make sure that each service:
* has its own `.service` file
* has its own `--data-dir`
* has its own `--*-port` settings
## Further examples
- A [service template file](https://github.com/chfast/ethereum-node/blob/main/nimbus%40.service) by Pawel Bylica which allows you to start two services at the same time, e.g. `nimbus@prater.service` and `nimbus@mainnet.service`.
- The [EthereumOnARM](https://github.com/diglos/ethereumonarm/blob/main/fpm-package-builder/nimbus/extras/nimbus.service) project maintains a service file as part of their Ethereum installation package repository.