Я хочу сделать скрипт для перезапуска моего сервера и его предварительных условий, одним из которых является geth. Я не вижу командной строки для перезапуска. я хочу что-то вроде
geth --restart --xxxx --yyyyy
Это существует?
В случае нет, безопасно ли просто убить процесс и запустить его снова?
Это то, что я использую в своей среде 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 достигают заданной температуры.
Я использую пару скриптов для управления экземплярами 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 в другом сценарии.
Пабло Ябо