Go-Ethereum

重新啟動 geth 節點,無法與 cron 或 Ubuntu 新貴服務一起正常工作

  • September 14, 2017

重新啟動 geth 節點,無法與 cron 或 Ubuntu 新貴服務一起正常工作

我的 geth 節點一天左右失敗一次。嘗試了一切,但仍然失敗。

Geth 1.6.1 掛起拋出“意外故障地址”致命錯誤

將 geth 升級到最新版本,從頭開始重建鏈,但每天都會失敗一次。

因此,需要重新啟動系統以保持節點正常執行。

第一次嘗試是創建一個像這樣的 cron 條目:

*/1 * * * * /home/my_local_username/ethereum/launch.sh

檢查 geth 是否正在執行。如果沒有,它會再次啟動 geth:

!/bin/sh

環境 - cat /home/my_local_username/my_env.sh/bin/sh

ps輔助| grep geth | grep -v grep > /dev/null

如果

$$ $? != 0 $$然後 /home/my_local_username/ethereum/geth –testnet –rpc –rpcapi “db,eth,net,web3,personal” –rpcport “8545” –mine –etherbase “0x8c6…” –gasprice “1000000000” –bootnodes “enode://20c…” 2> /home/my_local_username/ethereum/nohup.out fi

環境文件 /home/my_local_username/my_env.sh 是使用以下命令創建的:

環境 > /home/my_local_username/my_env.sh

這樣,當 geth 失敗時,它會在 1 分鐘後重新開始。它可以工作並且可以開採,但不能正常工作。我的意思是,當 geth 與 cron 一起重新啟動時,它的行為很奇怪。它不允許我打開這樣的終端:

$ ./geth –testnet 附加 ipc:/home/my_local_username/.ethereum/testnet/geth.ipc

它失敗並出現錯誤:

致命:無法連接到遠端geth:撥打unix /home/my_local_username/.ethereum/testnet/geth.ipc:連接:連接被拒絕

當通過 JSON-RPC 連結發送命令時,它也會失敗並出現錯誤:

未知帳戶

從 shell 終端手動啟動 geth 時,這兩件事可以正常工作。當從 cron 重新啟動時,它們不會。

第二次嘗試是在 Ubuntu 上為 geth 創建服務,如https://ethereum.stackexchange.com/a/2249/2426中所述

結果,同樣奇怪的行為:通過 JSON-RPC 埠發送命令時無法通過終端連接到 geth 和未知帳戶錯誤。

這是作為 cron 程序啟動時來自 geth 的日誌:

INFO [09-14|08:20:02] Starting peer-to-peer node               instance=Geth/v1.6.5-stable-cf87713d/linux-amd64/go1.8.3
INFO [09-14|08:20:02] Allocated cache and file handles         database=/home/bitnami/.ethereum/testnet/geth/chaindata cache=128 handles=1024
INFO [09-14|08:20:06] Initialised chain configuration          config="{ChainID: 3 Homestead: 0 DAO: <nil> DAOSupport: true EIP150: 0 EIP155: 10 EIP158: 10 Metropolis: 9223372036854775807 Engine: ethash}"
INFO [09-14|08:20:06] Disk storage enabled for ethash caches   dir=/home/bitnami/.ethereum/testnet/geth/ethash count=3
INFO [09-14|08:20:06] Disk storage enabled for ethash DAGs     dir=/home/bitnami/.ethash                       count=2
INFO [09-14|08:20:06] Initialising Ethereum protocol           versions="[63 62]" network=3
INFO [09-14|08:20:06] Loaded most recent local header          number=1658958 hash=2eacdb…cdfa00 td=1833602778380180
INFO [09-14|08:20:06] Loaded most recent local full block      number=1658958 hash=2eacdb…cdfa00 td=1833602778380180
INFO [09-14|08:20:06] Loaded most recent local fast block      number=1658958 hash=2eacdb…cdfa00 td=1833602778380180
WARN [09-14|08:20:07] Blockchain not empty, fast sync disabled 
INFO [09-14|08:20:07] Starting P2P networking 
INFO [09-14|08:20:10] UDP listener up                          self=enode://d01d74c3b76f6bcf57c548d36b977b49745328566e2a12c00dded0b4ad0970518a5615cde8fd833f8f2a93b35482cf373479baf8e0c634b44123d6c8067a2615@[::]:30303
INFO [09-14|08:20:10] RLPx listener up                         self=enode://d01d74c3b76f6bcf57c548d36b977b49745328566e2a12c00dded0b4ad0970518a5615cde8fd833f8f2a93b35482cf373479baf8e0c634b44123d6c8067a2615@[::]:30303
INFO [09-14|08:20:10] IPC endpoint opened: /home/bitnami/.ethereum/testnet/geth.ipc 
INFO [09-14|08:20:10] HTTP endpoint opened: http://127.0.0.1:8545 
INFO [09-14|08:20:10] Starting mining operation 
INFO [09-14|08:20:11] Commit new mining work                   number=1658959 txs=0 uncles=0 elapsed=424.726ms
INFO [09-14|08:24:21] Block synchronisation started 
INFO [09-14|08:24:21] Mining aborted due to sync 
INFO [09-14|08:24:32] Imported new chain segment               blocks=1 txs=10 mgas=1.612 elapsed=10.313s   mgasps=0.156 number=1658959 hash=5b879b…1d974e

我對所有這些錯誤感到很困惑。任何關於它的提示都會對我很有幫助。謝謝!

參考:

從另一個程序重新啟動 Geth

聽起來套接字未連接到您的 geth 實例。我在這裡看到 geth.ipc 可能會導致問題,您可以嘗試:

rm -f /home/my_local_username/.ethereum/testnet/geth.ipc

我自己沒有看到這個錯誤,但是這個套接字在硬殺死 geth 時會保留下來,並且可能對你來說處於糟糕的狀態。您還應該檢查啟動 geth 的日誌以查看是否引發任何套接字警告或錯誤。

這是我見過的保持 Geth 實例執行的最奇怪的方式:)

我建議您執行以下操作:

  • 首先,如果您在終端中啟動 Geth,然後關閉終端,您也會關閉 Geth。

您將希望讓您的節點在通過 ssh 連接到伺服器時可訪問的終端中執行。我建議你使用screen

  • 接下來在/etc/systemd/system. 適當地命名它 -node.service例如。

使用這樣的配置:

[Unit]
Description=Geth Node

[Service]
ExecStart=/usr/bin/screen -DmS node-screen -c /path/node.screenrc
ExecStop=/usr/bin/screen -S node-screen -X quit
User=root
Group=root
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

這告訴服務創建一個螢幕(稱為 node-screen)並使用 node.screenrc(螢幕配置文件)中的配置執行它。

  • 配置文件應包含以下內容:

screen -t 'Geth node' geth --fast --your-other-config-here

在重新啟動伺服器時,服務將執行並且 Geth 節點將重新啟動。

  • 如果您的節點隨機崩潰,您可以使用以下命令重新啟動它:

service node restart

  • 如果您希望它持續執行,您可以更改螢幕配置以執行 shell 腳本(而不是直接啟動節點),如下所示:

IE 將 Geth 啟動程式碼放在一個不斷執行的while循環中,這樣如果它崩潰,它就會重新啟動。

#!/bin/bash

while true
do
   geth --fast --other-config
done

引用自:https://ethereum.stackexchange.com/questions/26043