Using Cosmovisor
Cosmovisor 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/cosmovisor@v1.4.0
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=regen"
Environment="DAEMON_HOME=${HOME}/.regen"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="DAEMON_POLL_INTERVAL=300ms"
Environment="DAEMON_DATA_BACKUP_DIR=${HOME}/.regen"
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
For more information about the configuration options used in the example above, see Command Line Arguments And Environment Variables.
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 regen binary from source, the path will be different, so make sure you provide the path to the regen binary that will be used as the starting binary):
DAEMON_HOME=~/.regen DAEMON_NAME=regen cosmovisor init $HOME/go/bin/regen
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