Starten Sie Geth von einem anderen Prozess aus neu

Ich möchte ein Skript zum Neustarten meines Servers und seiner Voraussetzungen erstellen, von denen einer geth ist. Ich sehe keine Befehlszeile, um es neu zu starten. Ich möchte so etwas wie

geth --restart --xxxx --yyyyy

Gibt es das?

Ist es in diesem Fall sicher, den Prozess einfach zu beenden und erneut auszuführen?

Antworten (2)

Dies ist, was ich in meiner Linux-Umgebung verwende. Ich speichere folgendes in/home/user/bin/runGeth

#!/bin/sh

# Graceful exit, like pressing Control-C on a program
killall -q --signal SIGINT geth
sleep 10

# Hard kill, only to stop a process that refuses to terminate
killall -q geth

# Clear IPC as this can sometimes cause problems
rm -f /home/user/.ethereum/geth.ipc

DATE=`date +%Y%m%d_%H%M%S`
mv /home/user/ethlogs/geth.log /home/user/logarchive/geth.log_$DATE

# Message <= 32 bytes
MESSAGE="BokkyPooBah wuz here!"

# Use 6 for full details
VERBOSITY=3

geth --support-dao-fork --rpc --rpcaddr "192.168.7.123" --rpcport 8545 --extradata "$MESSAGE" --verbosity $VERBOSITY 2>> /home/user/ethlogs/geth.log &

Dann chmod 700 /home/user/bin/runGeth.

Und in /etc/rc.localfüge ich hinzu:

sudo -u user /home/user/bin/runGeth

Ich starte auch gethregelmäßig neu, da ich mehrere Fälle hatte, in denen es abstürzt oder abstürzt. Ich füge folgendes hinzucrontab -e

# m h  dom mon dow   command
10 1,7,13,19 * * * sudo -u user /home/user/bin/runGeth 


F : Falls nein, ist es sicher, den Prozess einfach zu beenden und erneut auszuführen?

Der elegante Ausgang für gethist notwendig. Ich lasse etwas Zeit, um gethordnungsgemäß herunterzufahren. Ich versuche dann einen harten Kill, da ich mich gethin der Vergangenheit geweigert habe, würdevoll auszusteigen.

Ich habe zuvor nur den Hard Kill verwendet und die Blockchain-Daten wurden beschädigt.


Ich verwende auch ähnliche Skripte, um mir regelmäßig E-Mails zu senden, die über das Coinbase-Guthaben, die ethminerHashrate, die GPU-Temperatur, die ETH-Preise und andere Statistiken berichten. Und ein Watchdog-Skript zum Herunterfahren von ethminerProzessen, wenn die GPUs eine bestimmte Temperatur erreichen.

Ich habe für alle Fälle killall -s SIGKILL -q geth hinzugefügt.

Ich verwende ein paar Skripte zum Verwalten meiner Geth-Instanzen

Zum Starten von Geth (hier gebe ich als Parameter die Ausführlichkeit an, aber Sie können mehr angeben, wenn Sie möchten)

verbosity=3
while [ "$1" != "" ]; do
    case $1 in
    -v | --verbosity )  shift
                        verbosity=$1
                        ;;
    esac
    shift
done
if test -z `ps -ef | grep 'SCREEN -dmS geth' | grep -v grep | awk '{print $2}'`
then
echo "Starting Geth..."
screen -dmS geth /usr/bin/geth --networkid "189" --identity "firstMiner" --nodiscover --rpc --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --rpcaddr "0.0.0.0" --rpcport "8545" --rpccorsdomain "*"  --maxpeers "25" --mine --etherbase "3a4ac889777bce619ad88eef2ad7b9cace99273e" --gasprice "0" --targetgaslimit "9999999" --verbosity "$verbosity"
echo "Geth started with verbosity $verbosity"
else
echo "Geth is alreay running"
fi

Für das Stoppen von geth

if test -z `ps -ef | grep 'SCREEN -dmS geth' | grep -v grep | awk '{print $2}'`
then
echo "Geth is already Stopped"
else
echo "Stopping Geth..."
ps -ef | grep 'SCREEN -dmS geth' | grep -v grep | awk '{print $2}' | xargs kill
echo "Geth stopped"
fi

Zum Überprüfen des Status von geth

if test -z `ps -ef | grep 'SCREEN -dmS geth' | grep -v grep | awk '{print $2}'`
then
echo "Geth is stopped"
else
echo "Geth is running"
fi

Zum Anhängen an die Geth-Konsole (ich gebe hier einen relativen Pfad zum IPC an, aber Sie können einen absoluten Pfad angeben)

if test -z `ps -ef | grep 'SCREEN -dmS geth' | grep -v grep | awk '{print $2}'`
then
echo "Geth is not running"
else
geth attach ipc:../.ethereum/geth.ipc
fi

Um neu zu starten, könnten Sie die Skripte geth stop und geth start in einem anderen Skript zusammenfassen.