Sponsor-Board.de
Linux Server Startscript HILFE

+- Sponsor-Board.de (https://www.sponsor-board.de)
+-- Forum: Community (/forumdisplay.php?fid=56)
+--- Forum: Hilfe (/forumdisplay.php?fid=102)
+---- Forum: Scripting (/forumdisplay.php?fid=108)
+---- Thema: Linux Server Startscript HILFE (/showthread.php?tid=64532)


Linux Server Startscript HILFE - minimal_warrior - 29.01.2018 17:56

Hallo zusammen,

Wir benutzen das Cloudsystem Minehook.
Nur das neustarten jeweils immer über die console mit diversen befehlen macht mir gar keine Lust.

Nun habe ich ein Startscript geschrieben aber Irgendwie kommt da beim Ausführen folgende Fehlermeldung:
./minehook.sh: line 36: syntax error near unexpected token `}'
./minehook.sh: line 36: `}'

Hier das Script:
[Link: Registrierung erforderlich]

Code:
#!/bin/bash

_start()
{
    cd Master
            screen -dmS Minehook-Master java -Xmx2048M -jar MineHook-Master_b274.jar
    cd ../
    cd Daemon
            screen -dmS Minehook-Daemon java -jar MineHook-Daemon_b274.jar
    cd ../
    exit 0
}

_stop()
{
    SCREENID=$(screen -ls | grep -w Minehook-Master | cut -f 2)
        if [ $SCREENID ]; then
            screen -S Minehook-Master -p 0 -X stuff "`printf "stop\r"`"
               while screen -ls | grep -w Minehook-Master > /dev/null
                do
                    sleep .1
                done
        else
                echo "Minehook-Master is not running"
        fi
        SCREENID=$(screen -ls | grep -w Minehook-Daemon | cut -f 2)
        if [ $SCREENID ]; then
                screen -S Minehook-Daemon -p 0 -X stuff "`printf "stop\r"`"
                while screen -ls | grep -w Minehook-Daemon > /dev/null
                do
                    sleep .1
                done
        else
                echo "Minehook-Daemon is not running"
    exit 0
}

case $1 in
        start)
                _start $2
        ;;
        stop)
                _stop $2
        ;;
esac

echo
echo "Usage:"
echo " ./minehook.sh [option]"
echo
echo "Options:"
echo " start     Starts the minehook"
echo " stop      Stops the minehook"
exit 2


Zu starten ist jeweils der Master als Jar wie auch der Daemon.

Ich möchte dies aus folgendem Grund, falls mal etwas Abstürzt, das dies wieder automatisch gestartet wird um so längere Downtimes zu überbrücken.

Ich bin über jede Hilfe sehr dankbar Smile


RE: Linux Server Startscript HILFE - NevaKee - 29.01.2018 19:06

Ein "fi" fehlt am Ende der letzten If-Abfrage.


RE: Linux Server Startscript HILFE - s.n.designs - 29.01.2018 19:20

Verwende am besten ein Startscript und lege es in den Ordner deiner Wahl.

minehook.sh

Code:
#!/bin/sh
screen -dmS Minehook-Master java -Xmx2048M -jar MineHook-Master_b274.jar


Danach legst du die Datei minehook im Ordner /etc/init.d an.

In diese Datei schreibst du folgendes:

Code:
#! /bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Minehook"
NAME=minehook
USER=                                 #BENUTZER UNTER DEM DAS AUSGEFÜHRT WERDEN SOLL
BINARY=minehook
BINARY_BIN=                            #VERZEICHNIS BIS ZUR DATEI MINEHOOK.SH
DAEMON=minehook.sh
PIDFILE=$BINARY_BIN/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

[ -x "$BINARY_BIN/$DAEMON" ] || exit 0

. /lib/lsb/init-functions

do_start()
{
  su $USER -s /bin/sh -c "$BINARY_BIN/$DAEMON start"
}

do_stop()
{
    SCREENID=$(screen -ls | grep -w Minehook-Master | cut -f 2)
        if [ $SCREENID ]; then
            screen -S Minehook-Master -p 0 -X stuff "`printf "stop\r"`"
               while screen -ls | grep -w Minehook-Master > /dev/null
                do
                    sleep .1
                done
        else
                echo "Minehook-Master is not running"
        fi
        SCREENID=$(screen -ls | grep -w Minehook-Daemon | cut -f 2)
        if [ $SCREENID ]; then
                screen -S Minehook-Daemon -p 0 -X stuff "`printf "stop\r"`"
                while screen -ls | grep -w Minehook-Daemon > /dev/null
                do
                    sleep .1
                done
        else
                echo "Minehook-Daemon is not running"
    exit 0
}

case "$1" in
  start)
    log_daemon_msg "Starting $DESC" ""
    do_start
    case "$?" in
      0|1) log_end_msg 0 ;;
      2) log_end_msg 1 ;;
    esac
    ;;
  stop)
    log_daemon_msg "Stopping $DESC" ""
    do_stop
    case "$?" in
      0|1) log_end_msg 0 ;;
      2) log_end_msg 1 ;;
    esac
    ;;
  *)
    exit 3
    ;;
esac

:

BITTE DAS VERZEICHNIS EINFÜGEN UND DEN BENUTZER, UNTER DEM DAS AUSGEFÜHRT WERDEN SOLL!!

Gehe über den Terminal in das Verzeichnis /etc/init.d und gebe folgenden Befehl ein.

Code:
sudo chmod +x minehook


Danach noch den Befehl

Code:
sudo update-rc.d minehook defaults 80 10


Und fertig.

//Update: Da war wohl jemand schneller, mit einer einfacheren Lösung Confused Redface Manchmal mache ich mir das gerne kompliziert.


RE: Linux Server Startscript HILFE - minimal_warrior - 29.01.2018 20:24

Mit deinem Script wird aber erst eigentlich alles automatisiert, sofern der Master Down geht wieder automatisch gestartet, sehe ich das richtig?

Das ganze sind ja 2 Dateien die zusammen Arbeiten/laufen müssen.

Erst muss die Master gestartet werden und dannach der Daemon der sich dann per Handshake mit dem Master verbindet.

Ich suche nun eine Möglichkeit dies alles vereinfacht zu machen über einen Befehl und falls der Master Down geht wieder alles automatisch neugestartet wird.

s.n.designs schrieb:
Verwende am besten ein Startscript und lege es in den Ordner deiner Wahl.

minehook.sh

Code:
#!/bin/sh
screen -dmS Minehook-Master java -Xmx2048M -jar MineHook-Master_b274.jar


Danach legst du die Datei minehook im Ordner /etc/init.d an.

In diese Datei schreibst du folgendes:

Code:
#! /bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Minehook"
NAME=minehook
USER=                                 #BENUTZER UNTER DEM DAS AUSGEFÜHRT WERDEN SOLL
BINARY=minehook
BINARY_BIN=                            #VERZEICHNIS BIS ZUR DATEI MINEHOOK.SH
DAEMON=minehook.sh
PIDFILE=$BINARY_BIN/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

[ -x "$BINARY_BIN/$DAEMON" ] || exit 0

. /lib/lsb/init-functions

do_start()
{
  su $USER -s /bin/sh -c "$BINARY_BIN/$DAEMON start"
}

do_stop()
{
    SCREENID=$(screen -ls | grep -w Minehook-Master | cut -f 2)
        if [ $SCREENID ]; then
            screen -S Minehook-Master -p 0 -X stuff "`printf "stop\r"`"
               while screen -ls | grep -w Minehook-Master > /dev/null
                do
                    sleep .1
                done
        else
                echo "Minehook-Master is not running"
        fi
        SCREENID=$(screen -ls | grep -w Minehook-Daemon | cut -f 2)
        if [ $SCREENID ]; then
                screen -S Minehook-Daemon -p 0 -X stuff "`printf "stop\r"`"
                while screen -ls | grep -w Minehook-Daemon > /dev/null
                do
                    sleep .1
                done
        else
                echo "Minehook-Daemon is not running"
    exit 0
}

case "$1" in
  start)
    log_daemon_msg "Starting $DESC" ""
    do_start
    case "$?" in
      0|1) log_end_msg 0 ;;
      2) log_end_msg 1 ;;
    esac
    ;;
  stop)
    log_daemon_msg "Stopping $DESC" ""
    do_stop
    case "$?" in
      0|1) log_end_msg 0 ;;
      2) log_end_msg 1 ;;
    esac
    ;;
  *)
    exit 3
    ;;
esac

:

BITTE DAS VERZEICHNIS EINFÜGEN UND DEN BENUTZER, UNTER DEM DAS AUSGEFÜHRT WERDEN SOLL!!

Gehe über den Terminal in das Verzeichnis /etc/init.d und gebe folgenden Befehl ein.

Code:
sudo chmod +x minehook


Danach noch den Befehl

Code:
sudo update-rc.d minehook defaults 80 10


Und fertig.

//Update: Da war wohl jemand schneller, mit einer einfacheren Lösung Confused Redface Manchmal mache ich mir das gerne kompliziert.