重新啟動 geth 節點,無法與 cron 或 Ubuntu 新貴服務一起正常工作
重新啟動 geth 節點,無法與 cron 或 Ubuntu 新貴服務一起正常工作
我的 geth 節點一天左右失敗一次。嘗試了一切,但仍然失敗。
將 geth 升級到最新版本,從頭開始重建鏈,但每天都會失敗一次。
因此,需要重新啟動系統以保持節點正常執行。
第一次嘗試是創建一個像這樣的 cron 條目:
*/1 * * * * /home/my_local_username/ethereum/launch.sh
檢查 geth 是否正在執行。如果沒有,它會再次啟動 geth:
!/bin/sh
環境 -
cat /home/my_local_username/my_env.sh
/bin/shps輔助| 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.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