Gibt es das Start/Stopp-Skript von geth nach dem Booten von Debian/Ubuntu?

Gibt es ein Start-/Stopp-Shell-Skript für Geth, das nach dem Start von Debian oder Ubuntu OS ausgeführt wird?

Beispielsweise befinden sich Startskripts normalerweise unter

/etc/init.d/ /etc/rc.local

Antworten (6)

Ich werde nicht in eine system.d vs. sysvinit-Debatte einsteigen, aber hier ist, wie Sie es mit dem Standard-Init-Manager machen könnten, mit dem Debian / Ubuntu ausgeliefert wird.

  • Erstellen Sie eine Datei /etc/systemd/system/geth@.serviceund füllen Sie sie damit:

    [Unit]
    Description=geth Ethereum daemon
    Requires=network.target
    
    [Service]
    Type=forking
    User=%I
    ExecStart=/home/USERNAME/go-ethereum/build/bin/geth
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
  • Wechsle /home/USERNAME/go-ethereum/build/bin/gethdorthin, wo dein Get ist :)

  • Wenn Sie mit der Datei fertig sind, aktivieren Sie den Dienstsudo systemctl enable geth@USERNAME.service

  • Dann kann Ihr Benutzer es mit startensudo systemctl start geth@USERNAME.service

Beim nächsten Neustart sollte es starten!

Weitere Details finden Sie auf der systemd.serviceManpage. Es gibt viele Optionen, die interessant sein könnten.

Habe das ausprobiert. Geth wird ständig von systemd neu gestartet. Ich denke, Sie meinten "Type = Simple", da sich Geth nicht selbst teilt

Folgendes verwende ich unter Ubuntu über upstart. Folgendes habe ich in die Datei eingefügt/etc/init/geth.conf

description "geth 1.3.5"

start on runlevel [2345]
stop on shutdown

respawn
respawn limit 10 5

setuid your_nonroot_user

script
  exec bash -c '/usr/bin/geth --rpc --verbosity "2" 2>>/home/geth/logs/geth'
end script

Dies wird beim Booten gestartet und Sie können über steuernsudo start|stop geth

1. Sie können die Start-App wie folgt hinzufügen

  1. Finden Sie den Speicherort der ausführbaren Geth-Datei mitwhich geth
  2. Führen Sie die folgenden Befehle der Reihe nach aus

Annehmen PATH-TO-GETHist das Ergebnis vonwhich geth

sudo cp PATH-TO-GETH /etc/init.d/
sudo chmod +x /etc/init.d/geth 
sudo update-rc.d geth defaults

2. Nach dem Neustart mit crontab ausführen

@reboot /path/to/script

3. Skript von hier aus starten/stoppen

#!/bin/bash
#
# chkconfig: 35 90 12
# description: Geth Instance 
#
# Get function from functions library
. /etc/init.d/functions
# Start the service GETH
start() {
        initlog -c "echo -n Starting GETH: "
        /path/to/geth &
        ### Create the lock file ###
        touch /var/lock/subsys/geth
        success $"geth startup"
        echo
}
# Restart the service geth
stop() {
        initlog -c "echo -n Stopping GETH: "
        killproc geth
        ### Now, delete the lock file ###
        rm -f /var/lock/subsys/geth
        echo
}
### main logic ###
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status geth
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac
exit 0

Wie führe ich Skripte beim Start aus?

Hier ist eine weitere Einstellung für das Upstart-Skript für Ubuntu 14.04 als Ansible-Playbook-Vorlage und Nicht-Root-Benutzer:

description "geth 1.4.12"

start on runlevel [2345]
stop on shutdown

respawn
respawn limit 10 5

script
  exec sudo -H -i -u {{ ansible_user }} -- bash -c '/usr/bin/geth {{geth_args}} 2>>/home/{{ansible_user}}/logs/geth.log'
end script

Installation - roles/geth/tasks/main.yml:

- name: Install dependencies
  apt: name={{item}} update_cache=yes
  with_items:
  - software-properties-common
  become: yes

- name: Install Ethereum repositories
  apt_repository: repo='ppa:ethereum/ethereum'
  become: yes

- name: Install geth
  apt: name={{item}} update_cache=yes
  with_items:
  - ethereum
  become: yes
  notify:
  - Restart geth

- name: Create logs folder
  file:
    path: "/home/{{ansible_user}}/logs"
    state: directory

- name: Setup startup script
  template:
    src: geth.conf
    dest: /etc/init/geth.conf
  become: yes
  notify:
  - Restart geth

Als systemd ausführen:

Erstellen Sie eine geth.service-Datei (/etc/systemd/system/geth.service):

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

Fügen Sie das Folgende ein

[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

Ersetzen Sie {$USER} durch den Benutzernamen oben. Verwenden Sie useradd , um bei Bedarf einen neuen Benutzer zu erstellen.

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

Aktivieren und starten Sie den Dienst:

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

service geth status
sudo service geth start

Überprüfen Sie den Status:

service geth status

Anhängen an eine Geth-Instanz:

geth attach

Beenden und deaktivieren Sie den Dienst:

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

OMG, ich habe es endlich geschafft...

Geth-Dienstdatei erstellen: /etc/init.d/geth

#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          geth
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $network $named $time
# Should-Stop:       $network $named $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop the geth daemon
# Description:       Controls the geth server daemon
### END INIT INFO
#
. /lib/lsb/init-functions
start() {   
   PCOUNT=`pgrep -c geth`
   if ((PCOUNT==1)); then
      /usr/bin/geth --testnet --syncmode=light --rpc --verbosity 0 --cache=1024 &
   fi
   echo $"Geth Started"
}
stop() {
   PCOUNT=`pgrep -c geth`
   if ((PCOUNT>1)); then   
      /usr/bin/killall -9 geth &
   fi
   echo "Geth Stopped"
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status geth
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
  echo $"Usage: $0 {start|stop|restart|reload|status}"
  exit 1
esac
exit 0

Berechtigungen festlegen

sudo chmod 755 /etc/init.d/geth
sudo chown root:root /etc/init.d/geth

Aktivieren Sie den Geth-Dienst

sudo update-rc.d geth defaults
sudo update-rc.d geth enable