Cosmovisor 是专为基于 Cosmos SDK 的区块链设计的进程管理器,可简化二进制文件(链)升级的管理。本指南提供为 Injective 网络节点设置 Cosmovisor 的分步说明。
注意: 这些说明假设你已有现有的链二进制文件(例如 injectived),如果选择从源代码安装 Cosmovisor,还需要有可用的 Go 环境。请根据你的具体设置调整名称和路径。
- 安装
- 环境变量
- 目录结构
- 运行 Cosmovisor
- 处理链升级
- 将 Cosmovisor 作为 Systemd 服务运行
通过 Go 安装
如果你已安装 Go,可以使用以下命令安装 Cosmovisor:
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@v1.5.0
提示: 确保你的 Go 二进制文件安装路径(通常是 $GOPATH/bin 或 $HOME/go/bin)已添加到系统的 PATH 中。你可以通过运行以下命令验证安装:
环境变量
设置以下环境变量,以便 Cosmovisor 知道要运行哪个二进制文件以及在哪里找到它:
-
DAEMON_NAME
你的链二进制文件的名称(例如 injectived)。
-
DAEMON_HOME
你的节点的主目录(例如 ~/.injectived)。
你可以在 shell 的配置文件(如 ~/.bashrc 或 ~/.profile)中设置这些变量,或直接在终端会话中导出:
export DAEMON_NAME=injectived
export DAEMON_HOME=~/.injectived
目录结构
Cosmovisor 期望在你的节点主目录中有特定的文件夹结构:
-
创建 Genesis 目录
此目录保存初始(genesis)二进制文件。
mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin
-
复制当前二进制文件
将当前的链二进制文件(例如
injectived)放入 genesis 文件夹。确保文件名与 DAEMON_NAME 值匹配(见下一节)。
cp $(which injectived) $DAEMON_HOME/cosmovisor/genesis/bin/injectived
运行 Cosmovisor
不要直接运行链的二进制文件,而是通过执行以下命令使用 Cosmovisor 启动节点:
Cosmovisor 将:
- 在
$DAEMON_HOME/cosmovisor/genesis/bin(或相应的升级文件夹)中查找二进制文件。
- 使用该二进制文件启动你的节点。
- 监控任何链上升级信号,并在需要时自动切换二进制文件。
处理链升级
当链上宣布升级时,准备新的二进制文件以便 Cosmovisor 可以自动切换:
-
创建升级目录
使用链上提供的升级名称(例如
v1.14.0):
mkdir -p $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
-
放置新的二进制文件
编译或下载新的二进制文件,然后将其复制到升级目录。确保二进制文件名称与
DAEMON_NAME 匹配。
cp /path/to/new/injectived $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
cp /path/to/new/libwasmvm.x86_64.so $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
提示: 如果你从 GitHub 下载了 injectived 二进制文件包,我们会将 libwasmvm.x86_64.so 复制到升级的 bin 目录。稍后会在 systemd 服务中添加环境变量,将此目录添加到 LD_LIBRARY_PATH。
-
升级过程
当达到升级高度时,Cosmovisor 将检测到计划的升级并自动切换到相应升级文件夹中的二进制文件。
将 Cosmovisor 作为 Systemd 服务运行
对于生产环境,通常将节点作为 systemd 服务运行。以下是示例服务文件。
-
创建服务文件
创建一个文件(例如
/etc/systemd/system/injectived.service),内容如下。根据需要调整路径和 <your_username>:
[Unit]
Description=Injective Daemon managed by Cosmovisor
After=network-online.target
[Service]
User=<your_username>
ExecStart=/home/<your_username>/go/bin/cosmovisor run start
Restart=always
RestartSec=3
Environment="DAEMON_NAME=injectived"
Environment="DAEMON_HOME=/home/<your_username>/.injectived"
Environment="PATH=/usr/local/bin:/home/<your_username>/go/bin:$PATH"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="UNSAFE_SKIP_BACKUP=true"
Environment="LD_LIBRARY_PATH=/home/<your_username>/.injectived/cosmovisor/current/bin"
[Install]
WantedBy=multi-user.target
-
启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable injectived.service
sudo systemctl start injectived.service
-
检查日志
验证服务是否正常运行:
journalctl -u injectived.service -f
Last modified on April 3, 2026