Когда мое приложение отключается от удаленного Geth, это означает, что он потеряет всю информацию синхронизации?
Мое приложение взаимодействует с удаленным узлом Geth через SSH. Первой командой sended была geth --cache=1024
Когда узел отправлял обратно информацию о регистрации синхронизации, соединение было потеряно. Затем я делаю новый сеанс и отправляю geth attach
и думаю, что узел работает все еще. Однако он возвращает ошибку:
Невозможно подключиться к удаленному geth: dial unix /home/.../.ethereum/geth.ipc: connect: нет такого файла или каталога
Действительно ли geth удаляет любые файлы синхронизации, когда теряет текущее соединение? И если это неверно, что происходит, когда узел Geth завершает свою работу (например, из-за сбоя)?
1 ответ
Если вы подключаетесь к удаленному компьютеру, а затем запускаете в консоли консольный код geth --cache=1024
, когда ваше SSH-соединение выпадает из geth
завершается.
Вы можете проверить, работает ли еще geth
SSH-обратно на ваш компьютер и введите команду ps -ef | grep geth
, например:
Iota:ESE user$ ps -ef | grep geth
501 37632 879 0 2:36pm ttys001 0:03.31 geth --rpc console
501 37634 2685 0 2:36pm ttys002 0:00.01 grep geth
Как только geth
завершается, geth.ipc
файл может быть удален в зависимости от того, прекращается ли приложение. Этот файл geth.ipc
является межпроцессным коммуникационным каналом, а не обычным файлом. Как только geth
завершается, файл все равно может оставаться в файловой системе, но другие процессы не могут связываться с geth
, используя этот канал.
Если geth
завершается без изящного закрытия, данные блок-цепи могут иногда (очень редко) быть повреждены.
Ниже приведен рецепт, если вы хотите сохранить geth
, запущенный на вашей машине Ubuntu (предположительно с ваших предыдущих сообщений). Если вы хотите завершить этот фоновый процесс geth
, используйте команду killall -q --signal SIGINT geth
Рецепт для запуска geth
Автоматически при запуске
Если вы хотите, чтобы geth
работал на вашем удаленном компьютере все время, вот рецепт, все, что нужно сделать в SSH сеанс на удаленном компьютере:
-
Создайте каталог для ваших журналов - я использую
$HOME/ethlogs
.[email protected]:~$ mkdir $HOME/ethlogs
-
Создайте каталог для архива журнала - я использую
$HOME/logarchive
.[email protected]:~$ mkdir $HOME/logarchive
-
Создайте файл
$HOME/bin/runGeth
со следующим содержимым:#!/bin/sh # Kill geth gracefully killall -q --signal SIGINT geth # Wait for geth to be killed gracefully sleep 30 # Kill viciously if geth is still running killall -q geth # Remove the IPC pipe file if it still exists rm $HOME/.ethereum/geth.ipc DATE=`date +%Y%m%d_%H%M%S` # Save old log file into the log archive directory mv $HOME/ethlogs/geth.log $HOME/logarchive/geth.log_$DATE # Use 6 for full details VERBOSITY=3 # Add your geth command line parameters below geth --cache=1024 --verbosity $VERBOSITY 2>> $HOME/ethlogs/geth.log &
-
Установите исполняемый бит файла.
chmod 700 $HOME/bin/runGeth
-
Выйдите из системы, а затем войдите в систему, так что ваш путь $ HOME /bin активируется, если он еще не был выполнен.
-
Запустите
geth
[email protected]:~$ runGeth
-
Если вы хотите
geth
автоматически запускаться после перезагрузки компьютера, добавьтеrunGeth
для вашего файла/etc/rc.local
.[email protected]:~$ sudo vi /etc/rc.local
и добавьте следующую строку перед
exit 0
:sudo -u {your username} /home/{your username}/bin/runGeth &
Сохранить и выйти из файла. Попробуйте перезагрузить компьютер и используйте
ps -ef | grep geth
, чтобы проверить, еслиgeth
.