Как я могу запустить go-ethereum в качестве процесса демона в Ubuntu?

Инструкции по установке для Ubuntu предлагают запустить gethиз командной строки, как я могу запустить его как процесс/службу демона в Ubuntu?

Ответы (5)

Запустить как системную службу

Создайте файл geth.service:

[Unit]
Description=Ethereum go client

[Service]
Type=simple
ExecStart=geth 2>%h/.ethereum/geth.log

[Install]
WantedBy=default.target

Включить услугу:

systemctl --user enable geth.service
systemctl --user start geth.service

Источник .

В качестве альтернативы вы можете использовать экран:

sudo apt-get update && sudo apt-get install screen -y

Затем вы можете сделать bash, подобный этому ( ~/geth.sh):

#!/usr/bin/env bash
echo "Starting geth"
screen -dmS geth /usr/bin/geth --verbosity 3

теперь давайте сделаем его исполняемым:

sudo chmod +x ~/geth.sh

Теперь вы можете запустить bash~/geth.sh

Вы подключаетесь к экрану с помощью screen -x geth

Вы отсоединяетесь от экрана, нажав CTRL + a, затем d

Если вы хотите подключиться к консоли geth после запуска процесса в фоновом режиме (или на экране), вы можете использовать:

geth attach

Источник .

Или просто разветвите его в фоновом режиме:

При запуске geht поставьте &в конце команды в терминале:

geth --rpc &

Перед закрытием терминала вы должны отключить процесс:

disown

Вы также можете передать журналы в такой файл:

geth --verbosity 4 --rpc 2>> /path/to/logfile

Но не забудьте отречься от него, прежде чем закрыть терминал.

Источник .

Отличный ответ. Однако «systemd», вероятно, должен быть первым примером — по крайней мере, это то, что я ожидал найти в качестве главного ответа.
У вас есть мой голос, но согласитесь, что раздел systemd, вероятно, является наиболее важной частью ответа.
обновил ответ
Круто, это отличный ответ!
Метод systemd: не удалось включить модуль: файл geth.service: нет такого файла или каталога. Я сохраняю файл в своей домашней папке и выполняю там команду.
@emisilva У меня была похожая проблема, которую я решил, изменив: 1) изменив команду enable на sudo и сделав путь абсолютным путем: sudo systemctl --user enable /home/ubuntu/geth.service2) также пришлось изменить команду на абсолютный путь в службе:ExecStart=/usr/bin/geth ...
Почему нам нужно отречься? @5chdn
Разве вы не хотите добавить в журнал служебный файл? 2>>вместо 2>?
Линия ExecStartу меня не работает. Согласно документации systemd, «в частности, перенаправление с использованием «<», «<<», «>» и «>>», конвейеры с использованием «|», запуск программ в фоновом режиме с использованием «&» и другие элементы синтаксис оболочки не поддерживается." Я также обнаружил, вопреки документации systemd, что необходим абсолютный путь к двоичному файлу.
Как запустить Geth, используя его флаги, в режиме демона с вашим решением?

Мне достаточно использовать эту команду:

nohup geth --rpc &

Чтобы проверить, работает ли служба:

ps ax | grep geth

Чтобы просмотреть последние сообщения журнала:

tail -f nohup.out

Чтобы остановить службу, которую я использую:

pkill geth
Чтобы получить консоль, прикрепите geth
killall gethкажется лучшим вариантом, чтобы остановить процесс geth.
это именно то, что мне нужно!
@alper killall gethне работает сnohup
@e18r попробуйте:kill -9 $(pgrep -f -l geth | awk '{print $1}')
@alper действительно killall gethработает. Вам просто нужно подождать несколько минут, чтобы он закрылся изящно

Вот обновление ответа 5chdn, в котором используется systemd. Это показывает, как запустить безголовый gethна вашем сервере Ubuntu.

Конечно, вы должны сначала установить инструменты командной строки, см . https://www.ethereum.org/cli . Вы также должны запустить MyEtherWallet на своем обычном настольном компьютере, чтобы создать учетную запись + закрытый ключ, чтобы вы могли получать средства.

Шаг 1: наденьте плащ

sudo bash

Другие шаги здесь основаны на том, что вы работаете как root. Если вы работаете не как root, узнайте об использовании systemd с пользовательскими процессами . tl; dr, в этом случае они будут запускаться только после входа в систему, но вы можете настроить так, чтобы пользовательская служба запускалась как загрузочная.

Шаг 2: сделайте услугу

cat > /root/geth.service <<EOF
[Unit]
Description=Ethereum go client

[Service]
Type=simple
ExecStart=/usr/bin/geth --etherbase 0xe677698ab732Aa1E56CF2A7997a00e3FA6F5bD88 2>%h/.ethereum/geth.log

[Install]
WantedBy=default.target
EOF

Выше вы можете заменить эфирную базу своего кошелька. Если вы не укажете etherbase geth, будет выдано предупреждение.

Шаг 3: запустите его

systemctl --user enable /root/geth.service
systemctl --user start geth.service

Это запустит его сейчас и после перезагрузки.

Шаг 4: проверьте это

sleep 5 # The geth server takes a few seconds to boot up
geth attach

В случае geth attachуспеха вы будете знать, что gethсервер запущен, и вы увидите:

Добро пожаловать в консоль Geth JavaScript!

Если что-то пошло не так, вы увидите:

Fatal: невозможно подключиться к удаленному серверу geth: наберите unix /root/.ethereum/geth.ipc: connect: соединение отклонено

Лучший способ - запустить как systemd:

Создайте файл geth.service (/etc/systemd/system/geth.service):

sudo nano /etc/systemd/system/geth.service

Вставьте ниже

[Unit]
Description=Geth

[Service]
Type=simple
User={$USER}
Restart=always
RestartSec=12
ExecStart=/bin/geth --syncmode "full" --rpc --rpcaddr "0.0.0.0"

[Install]
WantedBy=default.target

Замените {$USER} на имя пользователя выше. Используйте useradd для создания нового пользователя, если это необходимо.

sudo useradd -d /home/newUser -m --uid 10000 newUser

Включите и запустите службу:

sudo systemctl daemon-reload
sudo systemctl enable geth.service
sudo systemctl daemon-reload

service geth status
sudo service geth start

Проверьте статус:

service geth status

Присоединение к экземпляру geth:

geth attach

Остановите и отключите службу:

sudo service geth stop
sudo systemctl disable geth.service
sudo systemctl daemon-reload

Хотя принятый ответ великолепен, он не сработал для меня. Скорее всего, потому что я на AWS Linux AMI (ну, я знаю). Я собираюсь переключиться в какой-то момент (systemctl нет Пока это, похоже, сработало для меня:

  1. Создайте файл /etc/init.d/geth-testnet
#!/бин/баш
#chkconfig: 2345 20 80
#description Запустить тестовую сеть RPC

su ec2-user -c '/path/to/get --verbosity 3 --testnet --rpc --rpcaddr="0.0.0.0" --rpccorsdomain="*" --rpcapi="db,eth,net, web3,личное"'

  1. Бежать
chmod +x geth-тестнет
chkconfig --добавить geth-testnet
chkconfig --level 345 geth-testnet включен
Я могу ошибаться, но является ли эта часть приведенной выше команды: '--rpc --rpcaddr="0.0.0.0" --rpccorsdomain="*" открывающей гет-порты для возможной атаки? Кажется, я помню какой-то пост пяти или шести месяцев назад о том, что кто-то теряет эфир при запуске geth с портами, открытыми для всего мира, как говорится здесь. Хотя может ошибся. Я уверен, что кто-то меня поправит, если я ошибаюсь.
в целях безопасности, возможно, любой, кто найдет это, удалит эту часть, пока кто-то не подтвердит или не опровергнет то, что сказал @ThomasJayRush