Qwoyn Studios
Search
K

Using Cosmovisor

Cosmovisor (opens new window)is a process manager for running application binaries. Using Cosmovisor is not required but recommended for node operators that would like to automate the upgrade process.

Installation

Cosmovisor Versions
The following instructions use the latest version (v1.4), which now supports installation with go install.
For more information about each version, see the release notes:
Use go install to install cosmovisor directly without building from source
go install cosmossdk.io/tools/cosmovisor/cmd/[email protected]
Check the version:
cosmovisor version
You should see the following (the errors following the version are expected if environment variables are not yet set, which will be set in the systemd file in the next section):
cosmovisor version: 1.4.0

Building Cosmovisor from source

Clone the cosmos-sdk repository (if not already cloned):
git clone https://github.com/cosmos/cosmos-sdk
Change into the cosmos-sdk repository:
cd cosmos-sdk
Fetch the latest tags (if already cloned):
git fetch --all
Check out the tagged release:
git checkout tools/cosmovisor/v1.4.0
Install the cosmovisor binary:
go install cosmovisor
Check the version:
cosmovisor version
You should see the following (the errors following the version are expected if environment variables are not yet set, which will be set in the systemd file in the next section):
cosmovisor version: 1.4.0

Cosmovisor Service

Create a cosmovisor.service systemd service file and make sure the environment variables are set to the desired values (the following example includes the default cosmovisor configuration settings with the exception of DAEMON_NAME and DAEMON_HOME):
Unsafe Skip Backups
The following recommended settings include UNSAFE_SKIP_BACKUP=false as a precaution but setting this to true will make the upgrade go much faster. Ideally backups are created ahead of time in order to limit the time it takes to bring validators back online.
echo "[Unit]
Description=Cosmovisor daemon
After=network-online.target
[Service]
Environment="DAEMON_NAME=qwoynd"
Environment="DAEMON_HOME=${HOME}/.qwoyn"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="DAEMON_POLL_INTERVAL=300ms"
Environment="DAEMON_DATA_BACKUP_DIR=${HOME}/.qwoynd"
Environment="UNSAFE_SKIP_BACKUP=false"
Environment="DAEMON_PREUPGRADE_MAX_RETRIES=0"
User=${USER}
ExecStart=${GOBIN}/cosmovisor run start
Restart=always
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target
" >cosmovisor.service
Move the file to the systemd directory:
sudo mv cosmovisor.service /lib/systemd/system/cosmovisor.service

Initialize Cosmovisor

Run the initialization command (if you built the qwoynd binary from source, the path will be different, so make sure you provide the path to the qwoynd binary that will be used as the starting binary):
DAEMON_HOME=~/.qwoynd DAEMON_NAME=qwoynd cosmovisor init $HOME/go/bin/qwoynd

Starting Cosmovisor

Start cosmovisor to make sure everything is configured correctly:
sudo systemctl start cosmovisor
Check the status of the cosmovisor service:
sudo systemctl status cosmovisor
Enable cosmovisor to start automatically when the machine reboots:
sudo systemctl enable cosmovisor.service

Configuration Updates

When you make changes to the configuration, be sure to stop and start the cosmovisor service so that you are using the latest changes.
sudo systemctl stop cosmovisor
sudo systemctl daemon-reload
sudo systemctl start cosmovisor
Check the status of the cosmovisor service:
sudo systemctl status cosmovisor