我在启动 的 systemd 服务时遇到问题geth
。
这是服务规范geth.service
[Unit]
Description=Geth
[Service]
Type=simple
User=eth
Restart=always
RestartSec=12
ExecStart=/home/eth/starteth.sh
[Install]
WantedBy=default.target
这是starteth.sh
脚本
#!/usr/bin/env bash
geth --syncmode "fast" --rpc --rpcport "9820" --rpcaddr "127.0.0.1" --rpccorsdomain "*"
启动服务并检查状态时出现错误
root@server:~# sudo systemctl start geth
root@server:~# sudo systemctl status geth
● geth.service - Geth
Loaded: loaded (/etc/systemd/system/geth.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Wed 2021-06-16 22:02:51 CEST; 3s ago
Process: 19295 ExecStart=/home/eth/starteth.sh (code=exited, status=203/EXEC)
Main PID: 19295 (code=exited, status=203/EXEC)
编辑:操作系统是 Ubuntu 18
答案1
这starteth.sh
是一个 shell 脚本,期望找到一个名为geth
中某处的可执行文件$PATH
,但很可能找不到,因为$PATH
systemd 使用的文件非常少。哪里有这样的文件吗?尝试locate geth
或find / -name geth
找到它。然后在geth
in前面添加starteth.sh
正确的绝对路径。
答案2
正如上面提到的找到 geth 的答案,所以是的文件 geth 存在 /usr/bin/geth
但错误仍然出现
× geth.service - 以太坊 go 客户端 已加载:已加载(/etc/systemd/system/geth.service;已启用;供应商预设:已启用) 活动:自 2023 年 4 月 26 日星期三 13:17 起失败(结果:退出代码) :37 世界标准时间; 2分钟46秒前进程:2862 ExecStart=/usr/bin/geth --networkid 9988 --datadir /opt/ethpoa2/node1/data --port 30303 --ipcdisable > 主要PID:2862(代码=退出,状态=217/用户)CPU:1ms
4 月 26 日 13:17:37 ip-172-31-87-252 systemd[1]: geth.service: 失败,结果为“退出代码”。 4 月 26 日 13:17:37 ip-172-31-87-252 systemd[1]: geth.service: 计划重启作业,重启计数器为 5。 4 月 26 日 13:17:37 ip-172-31-87- 252 systemd[1]:已停止以太坊 go 客户端。 4 月 26 日 13:17:37 ip-172-31-87-252 systemd[1]: geth.service: 启动请求重复得太快。 4 月 26 日 13:17:37 ip-172-31-87-252 systemd[1]: geth.service: 失败,结果为“退出代码”。 4 月 26 日 13:17:37 ip-172-31-87-252 systemd[1]: 无法启动以太坊 go 客户端。