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?
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.local
füge ich hinzu:
sudo -u user /home/user/bin/runGeth
Ich starte auch geth
regelmäß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 geth
ist notwendig. Ich lasse etwas Zeit, um geth
ordnungsgemäß herunterzufahren. Ich versuche dann einen harten Kill, da ich mich geth
in 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 ethminer
Hashrate, die GPU-Temperatur, die ETH-Preise und andere Statistiken berichten. Und ein Watchdog-Skript zum Herunterfahren von ethminer
Prozessen, wenn die GPUs eine bestimmte Temperatur erreichen.
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.
Pablo Jabo