Перезапустите Geth из другого процесса

Я хочу сделать скрипт для перезапуска моего сервера и его предварительных условий, одним из которых является geth. Я не вижу командной строки для перезапуска. я хочу что-то вроде

geth --restart --xxxx --yyyyy

Это существует?

В случае нет, безопасно ли просто убить процесс и запустить его снова?

Ответы (2)

Это то, что я использую в своей среде Linux. Я сохраняю следующее в/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 &

Тогда chmod 700 /home/user/bin/runGeth.

И в /etc/rc.local, я добавляю:

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

Я также периодически перезапускаю geth, так как у меня было несколько случаев, когда он блокировался или умирал. Я добавляю следующее кcrontab -e

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


В : Если нет, безопасно ли просто убить процесс и запустить его снова?

Нужен изящный выход для geth. Я оставляю некоторое время geth, чтобы изящно закрыться. Затем я пытаюсь совершить жесткое убийство, поскольку gethв прошлом отказывался изящно выходить.

Раньше я использовал только аппаратное уничтожение, и данные блокчейна были повреждены.


Я также использую аналогичные скрипты для периодической отправки электронных писем с отчетами о балансе монет, ethminerхешрейте, температуре графического процессора, ценах ETH и другой статистике. И сторожевой скрипт для остановки ethminerпроцессов, если GPU достигают заданной температуры.

Я добавил killall -s SIGKILL -q geth на всякий случай.

Я использую пару скриптов для управления экземплярами geth.

Для запуска geth (здесь я предоставляю в качестве параметра подробность, но вы можете указать больше, если хотите)

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

Для остановки гет

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

Для проверки статуса 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

Для подключения к консоли geth (здесь я указываю относительный путь к ipc, но вы можете указать абсолютный путь)

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

Для перезапуска вы можете объединить сценарии geth stop и geth start в другом сценарии.