Virtual-talk
Läuft mein OpenSim im screen oder nicht? - Druckversion

+- Virtual-talk (http://virtual-talk.de)
+-- Forum: Allgemein (http://virtual-talk.de/forumdisplay.php?fid=1)
+--- Forum: Tipps und Tricks (http://virtual-talk.de/forumdisplay.php?fid=75)
+--- Thema: Läuft mein OpenSim im screen oder nicht? (/showthread.php?tid=1939)



Läuft mein OpenSim im screen oder nicht? - Manni - 04-27-2021

Läuft mein OpenSim im screen oder nicht?
Ihr könnt das natürlich ganz einfach prüfen indem ihr screen -ls eingebt und in diese liste schaut.
Aber es geht auch anders mit shell Scripte.
ACHTUNG! Der Screenname ist hier der gleiche wie der Verzeichnisname. Bitte bei bedarf abändern.

Als erstes mal ein kleines Script was euch Optisch anzeigt ob der Screen gerade läuft oder nicht und euch einen Rückgabewert übergibt:
osxworks.sh
Code:
#!/bin/bash
cd /opt

sleep 1

# osxworks.sh screen_name
# Beispiel-Example: ./osxworks.sh sim1

if ! screen -list | grep -q "$1"; then
    # es laeuft nicht - not work
        echo "$(tput setaf 7)$(tput setab 1) $1 OFFLINE! $(tput sgr 0)"
        exit 1
    else
    # es laeuft - work
        echo "$(tput setaf 7)$(tput setab 2) $1 ONLINE! $(tput sgr 0)"
        exit 0
fi


Als zweites ein weiteres Script was das erste Script auswertet und euch das ganze anzeigt:

osworks.sh
Code:
#!/bin/bash
cd /opt

function auswertung
{
    # Die Auswertung
    if [ "$?" = 0 ] ;
    then
        echo "Rückgabewert Null, es läuft also"
    else
        echo "Rückgabewert Eins, es läuft nicht"
    fi
}

/opt/osxworks.sh RO
auswertung

/opt/osxworks.sh MO
auswertung

/opt/osxworks.sh sim1
auswertung

/opt/osxworks.sh sim2
auswertung

/opt/osxworks.sh sim3
auswertung

/opt/osxworks.sh sim4
auswertung

/opt/osxworks.sh sim5
auswertung

/opt/osxworks.sh sim6
auswertung

/opt/osxworks.sh sim7
auswertung

/opt/osxworks.sh sim8
auswertung

/opt/osxworks.sh sim9
auswertung

/opt/osxworks.sh sim10
auswertung

So könnt ihr kontrolieren ob screens laufen oder nicht und diese Starten, Stoppen oder Neustarten wie es euch beliebt.


Zur Vervollständigung noch die Start und Stopp Scripte:

osxstart.sh
Code:
#!/bin/bash
cd /opt

# osxstart.sh screen_name
# Beispiel-Example: ./osxstart.sh sim1

sleep 10

if [ -d $1 ]; then
  echo "$(tput setaf 4)OpenSim: $(tput setab 7)Regionen OpenSimulator $1 Starten$(tput sgr 0)"
  cd /opt/$1/bin
  screen -fa -S $1 -d -U -m mono OpenSim.exe
else
  echo "$(tput setaf 2)Nachfolgende screens wurden gestartet $(tput sgr 0)"
  screen -ls
   exit 1
fi

osxstop.sh
Code:
#!/bin/bash
cd /opt

# osxstop.sh screen_name
# Beispiel-Example: ./osxstop.sh sim1

sleep 10

if screen -list | grep -q $1; then
  echo "$(tput setaf 1)OpenSim: $(tput setab 7)Regionen OpenSimulator $1 Beenden$(tput sgr 0)"
  screen -S $1 -p 0 -X eval "stuff 'shutdown'^M"
else
  echo "$(tput setaf 1)OpenSim: $(tput setab 7)Regionen OpenSimulator $1 nicht vorhanden$(tput sgr 0)"
fi



RE: Läuft mein OpenSim im screen oder nicht? - Manni - 04-28-2021

Hier noch eine kleine Spielerei von mir.
Erst wird geschaut ob der Simulator läuft oder nicht.
Dann wird dieser wenn er läuft neu gestartet, oder wenn er nicht läuft halt gestartet.
Dazu kann man noch irgendwelchen Kram einbauen, wie Log Dateien löschen oder die Karten löschen.
Wichtig ist dem Simulator genug Zeit zum herunterfahren zu geben,
diese Zeit hängt von der Region ab und sollte ausreichend dimensioniert werden.
Eingestellt wird das unter ### Einstellungen ### ganz oben im Script.

osstartstop.sh
Code:
#!/bin/bash
cd /opt

# Dies schaut nach ob ein Simulator laeuft:
# Wenn ja wird der beendet und wieder gestartet.
# Wenn nein dann wird der gestartet.

clear

### Einstellungen ###
# Pausenzeit zwischen den Aktionen.
WARTE=30
# Wartezeit fuer das Herunterfahren des Simulator.
HERUNTERFAHREN=90
# Anzeige Wartezeit
NEUSTART=60
### Einstellungen Ende ###

### Funktion works, nachsehen ob was im Screen laeuft.
function works
{
    # Die Auswertung
    if ! screen -list | grep -q "$1"; then
        # es laeuft nicht - not work
            echo "$(tput setaf 7)$(tput setab 1) $1 OFFLINE! $(tput sgr 0)"
            return 1
        else
        # es laeuft - work
            echo "$(tput setaf 7)$(tput setab 2) $1 ONLINE! $(tput sgr 0)"
            return 0
    fi
}

### Funktion start, startet einen Simulator.
function osstart()
{
    sleep 10
    
    if [ -d /opt/$SIMULATOR ]; then
      echo "$(tput setaf 4)OpenSim: $(tput setab 7)OpenSimulator $SIMULATOR Starten$(tput sgr 0)"
      cd /opt/$SIMULATOR/bin
      screen -fa -S $SIMULATOR -d -U -m mono OpenSim.exe
    else
      echo "$(tput setaf 1)OpenSim Start: $(tput setab 7)OpenSimulator $SIMULATOR nicht vorhanden$(tput sgr 0)"
    fi
}

### Funktion stop, beendet einen Simulator.
function osstop()
{
    sleep 10
    
    if screen -list | grep -q $SIMULATOR; then
      echo "$(tput setaf 1)OpenSim: $(tput setab 7)OpenSimulator $SIMULATOR Beenden$(tput sgr 0)"
      screen -S $SIMULATOR -p 0 -X eval "stuff 'shutdown'^M"
    else
      echo "$(tput setaf 1)OpenSim Stop: $(tput setab 7)OpenSimulator $SIMULATOR nicht vorhanden$(tput sgr 0)"
    fi
}

### Funktion startstop, hier kommt alles zusammen.
function startstop()
{
    SIMULATOR=$1
    works $SIMULATOR
    RWERT=$?
    
    # Die Auswertung
    if [ "$RWERT" = 0 ] ;
    then
        ### TRUE es laeuft!        
        # Benachrichtigung an alle das die Region neu gestartet wird.
        screen -S $SIMULATOR -p 0 -X eval "stuff 'alert Region wird in 180 Sekunden neu gestartet!'^M"
        sleep $NEUSTART
        screen -S $SIMULATOR -p 0 -X eval "stuff 'alert Region wird in 120 Sekunden neu gestartet!'^M"
        sleep $NEUSTART
        screen -S $SIMULATOR -p 0 -X eval "stuff 'alert Region wird in 60 Sekunden neu gestartet!'^M"
        sleep $NEUSTART
        
        # Simulator sauber ohne Kill herunterfahren.
        osstop $SIMULATOR
        sleep $HERUNTERFAHREN
        
        # Hier nachschauen ob er wirklich heruntergefahren ist, ansonsten muss der Screen gekillt werden.
        # Sollte das Killen zur Regel werden, sind die Wartezeiten fuer das herunterfahren zu gering gewaehlt.
        works $SIMULATOR
        KILLWERT=$?
        if [ "$KILLWERT" = 0 ] ;
        then
            screen -X -S $SIMULATOR kill
            echo "$(tput setaf 1) Muste $SIMULATOR Killen! $(tput sgr 0)"
        fi
        
        ### Hier koennt ihr alles einfuegen was ihr sonst noch so braucht
        # Log Dateien loeschen aber VORSICHT!
        echo "$(tput setaf 5) $SIMULATOR Log Dateien werden nicht gelöscht! $(tput sgr 0)"
        # rm /opt/$SIMULATOR/bin/*.log
        
        # Map-Karten loeschen aber VORSICHT!
        echo "$(tput setaf 5) $SIMULATOR Map-Karten werden nicht gelöscht! $(tput sgr 0)"
        # rm -r /opt/$SIMULATOR/bin/maptiles/*
        ### Einfuegen ENDE
        
        # Simulator Starten.
        osstart $SIMULATOR
        echo " " # Leerzeile
    else
        ### FALSE es laeuft nicht!
        
        # Gibt es das Verzeichnis ueberhaupt, wenn ja starten wir.
        if [ -d /opt/$SIMULATOR ]; then
            osstart $SIMULATOR
            echo " " # Leerzeile
        else
            echo "$(tput setaf 1)OpenSim Start: $(tput setab 7)OpenSimulator $SIMULATOR nicht vorhanden$(tput sgr 0)"
        fi
    fi
    
    # Kleine Pause um den Server nicht zu ueberfordern.
    sleep $WARTE
}

### Neustart der Regionen, Screen Name ist gleich Verzeichnissname
# Format ein Verzeichnisname pro Zeile, am Ende muss eine leere Zeile sein.
# Textdatei Name: SimulatorList.ini
item_re="^(Item.*):$"
while read -r; do
    if [[ $REPLY =~ $item_re ]]; then
        item=${BASH_REMATCH[1]}
    else            
        # Start oder Neustart der gelisteten Regionen
        startstop $item $REPLY
    fi
done < SimulatorList.ini

echo "$(tput setaf 2) Alles erledigt! $(tput sgr 0)"


Die Konfigurationsliste besteht einfach aus dem Verzeichnissnamen.
Achtung: Am ende muss eine leere Zeile sein.

SimulatorList.ini
Code:
sim1
sim2
sim3
sim4
sim5
sim6
sim7
sim8
sim9
sim10



RE: Läuft mein OpenSim im screen oder nicht? - Manni - 04-30-2021

Robust und Money
Das funktioniert natürlich auch ohne Money.
Robust starten und stoppen geht mit ./osxgrid.sh rostart oder ./osxgrid.sh rostop

osxgrid.sh
Code:
#!/bin/bash
cd /opt

sleep 3

# osxgrid.sh Kommando
# Beispiel: ./osxgrid.sh gridstart oder ./osxgrid.sh gridstop
# ACHTUNG:
# Die Startreihenfolge ist: Robust, Money, Welcome Region dann die Restlichen Regionen nach belieben!
# oder: Robust, Welcome Region dann die Restlichen Regionen nach belieben!

### Einstellungen ###
WARTEZEIT=30
MONEYWARTEZEIT=50
### Einstellungen Ende ###

KOMMANDO=$1

### Funktion rostart, Robust Server starten.
function rostart()
{
    robust="/opt/robust/"
    if [ -d "$robust" ]; then
      # Take action if $robust exists. #
      echo "$(tput setaf 4)OpenSim: $(tput setab 3)RobustServer Start$(tput sgr 0)"
      cd /opt/robust/bin
      screen -fa -S RO -d -U -m mono Robust.exe
    else
      echo "$(tput setaf 2)Nachfolgende screens wurden gestartet $(tput sgr 0)RO $(tput setaf 2)und $(tput sgr 0)OS$(tput setaf 2).$(tput sgr 0)"
      screen -ls
       exit 1
    fi
    
    sleep $WARTEZEIT
}

### Funktion mostart, Money Server starten.
function mostart()
{
    money="/opt/robust/"
    if [ -d "$money" ]; then
      # Take action if $sim1 exists. #
      echo "$(tput setaf 4)OpenSim: $(tput setab 3)MoneyServer Start$(tput sgr 0)"
      cd /opt/robust/bin
      screen -fa -S MO -d -U -m mono MoneyServer.exe
    else
      echo "$(tput setaf 2)Nachfolgende screens wurden gestartet $(tput sgr 0)RO $(tput setaf 2)und $(tput sgr 0)OS$(tput setaf 2).$(tput sgr 0)"
      screen -ls
       exit 1
    fi
    
    sleep $WARTEZEIT
}

### Funktion rostop, Robust Server herunterfahren.
function rostop()
{
    if screen -list | grep -q "RO"; then
      echo "$(tput setaf 1)OpenSim: $(tput setab 3)RobustServer Beenden$(tput sgr 0)"
      screen -S RO -p 0 -X eval "stuff 'shutdown'^M"
    else
      echo "$(tput setaf 1)OpenSim: $(tput setab 3)RobustServer nicht vorhanden$(tput sgr 0)"
    fi
    
    sleep $WARTEZEIT
}

### Funktion mostop, Money Server herunterfahren.
function mostop()
{
    if screen -list | grep -q "MO"; then
      echo "$(tput setaf 1)OpenSim: $(tput setab 3)MoneyServer Beenden$(tput sgr 0)"
      screen -S MO -p 0 -X eval "stuff 'shutdown'^M"
    else
      echo "$(tput setaf 1)OpenSim: $(tput setab 3)MoneyServer nicht vorhanden$(tput sgr 0)"
    fi
    
    sleep $MONEYWARTEZEIT
}

### Eingabeauswertung:
case  $KOMMANDO  in
    rostart)
    rostart
        ;;
    mostart)
    mostart
        ;;           
    rostop)      
    rostop
        ;;
    mostop)      
    mostop
        ;;
    gridstart)      
    rostart
    mostart
        ;;
    gridstop)      
    mostop
    rostop
        ;;
    *) printf "\nUnbekannter aufruf. Sie können einen der genannten Kommandos auswählen:\nrostart, mostart, rostop, mostop, gridstart oder gridstop.\n\n";;
esac

echo "$(tput setaf 2) Laufende Screens auflisten! $(tput sgr 0)"
screen -ls



RE: Läuft mein OpenSim im screen oder nicht? - Manni - 05-02-2021

Ich habe mal alles in einem Script gepackt.


Version 0.01.4 Benutzung auf eigene Gefahr.


Das Script befindet sich in einer Testphase.


Hilfe aufrufen mit ./opensim.sh hilfe



Beipiele:

Einzelnen Simulator im Verzeichnis sim1 Starten:

./opensim.sh osstart sim1

Einzelnen Simulator im Verzeichnis sim1 Stoppen:

./opensim.sh osstop sim1



Funktionsübersicht

Funktion: - Parameter:  - Informationen:

assetdel - screen_name Regionsname Objektname - Einzelnes Asset löschen.

autologdel - hat keine Parameter - Löscht alle Log Dateien.

automapdel - hat keine Parameter - Löscht alle Map Karten.

autorestart - hat keine Parameter - Startet das gesammte Grid neu.

autoscreenstop - hat keine Parameter - Killt alle OpenSim Screens.

autostart - hat keine Parameter - Startet das gesammte Grid.

autostop - hat keine Parameter - Stoppt das gesammte Grid.

autosimstart - hat keine Parameter - Startet alle Regionen.

autostarttimer - HH:MM, HH:MM:SS, YYYY-MM-DD HH:MM, tomorrow 11:00, 100sec, 30min, 20hours, 1hours 15min - setzt autotimer neu.

autosimstop - hat keine Parameter - Beendet alle Regionen.

gridstart - hat keine Parameter - Startet Robust und Money.

gridstop - hat keine Parameter - Beendet Robust und Money.

hilfe - hat keine Parameter - Diese Hilfe.

logdel - Verzeichnisname - Löscht einzelne Simulator Log Dateien.

mapdel - Verzeichnisname - Löscht einzelne Simulator Map-Karten.

mostart - hat keine Parameter - Startet Money Server.

mostop - hat keine Parameter - Stoppt Money Server.

settings - hat keine Parameter - setzt Linux Einstellungen.

osstart - Verzeichnisname - Startet einzelnen Simulator.

osstop - Verzeichnisname - Stoppt einzelnen Simulator.

rostart - hat keine Parameter - Startet Robust Server.

rostop - hat keine Parameter - Stoppt Robust Server.

terminator - hat keine Parameter - Killt alle laufenden Screens.

works - Verzeichnisname - Einzelne screens auf Existens prüfen.







opensim.sh







Code:
#!/bin/bash
# opensim Version 0.01.5

clear

echo "   ____                        _____  _                    _         _               "    
echo "  / __ \                      / ____|(_)                  | |       | |              "
echo " | |  | | _ __    ___  _ __  | (___   _  _ __ ___   _   _ | |  __ _ | |_  ___   _ __ "
echo " | |  | ||  _ \  / _ \|  _ \  \___ \ | ||  _   _ \ | | | || | / _  || __|/ _ \ |  __|"
echo " | |__| || |_) ||  __/| | | | ____) || || | | | | || |_| || || (_| || |_| (_) || |   "
echo "  \____/ |  __/  \___||_| |_||_____/ |_||_| |_| |_| \____||_| \____| \__|\___/ |_|   "
echo "         | |                                                                         "
echo "         |_|                                                                         "
echo "        Virtuelle Welten"
echo " "

### Einstellungen ###
# Das Startverzeichnis home oder opt zum Beispiel.
STARTVERZEICHNIS="opt"
# Die unterschiedlichen wartezeiten bis die Aktion ausgeführt wurde.
WARTEZEIT=30
STARTWARTEZEIT=10
STOPWARTEZEIT=30
MONEYWARTEZEIT=50
### Einstellungen Ende ###

#Black=0
#Red=1
#Green=2
#Blue=4
#White=7

cd /$STARTVERZEICHNIS || exit
sleep 1
KOMMANDO=$1

### Funktion assetdel, Asset von der Region loeschen.
# assetdel screen_name Regionsname Objektname
function assetdel()
{
    echo "$(tput setaf 1)OpenSim: $(tput setab 7)$3 Asset von der Region löschen$(tput sgr 0)"

    screen -S "$1" -p 0 -X eval "stuff 'change region ""$2""'^M"
    #screen -S $1 -p 0 -X eval "stuff 'alert "Loesche: $3"'^M" # Mit einer loesch Meldung
    screen -S "$1" -p 0 -X eval "stuff 'delete object name ""$3""'^M"
    screen -S "$1" -p 0 -X eval "stuff 'y'^M"
}

### Funktion works, screen pruefen ob er laeuft.
# works screen_name
function works()
{
    if ! screen -list | grep -q "$1"; then
        # es laeuft nicht - not work
            echo "$(tput setaf 7)$(tput setab 1) $1 OFFLINE! $(tput sgr 0)"
            return 1
        else
        # es laeuft - work
            echo "$(tput setaf 7)$(tput setab 2) $1 ONLINE! $(tput sgr 0)"
            return 0
    fi
}

### Funktion checkfile, pruefen pruefen ob vorhanden.
# checkfile "pfad/name"
# checkfile /pfad/zur/datei && echo "File exists" || echo "File not found!"
function checkfile
{
    [ -f "$1" ]
    return $?
}

### Funktion mapdel, loescht die Map-Karten.
# mapdel Verzeichnis
# Beispiel-Example: mapdel sim1
function mapdel()
{
    if [ -d "$1" ]; then
      echo "$(tput setaf 1)OpenSim: $(tput setab 7)OpenSimulator maptile $1 geloescht$(tput sgr 0)"
      cd /$STARTVERZEICHNIS/"$1"/bin || exit
      rm -r maptiles/*
    else
      echo "$(tput setaf 1)maptile $1 nicht gefunden $(tput sgr 0)"
    fi
}

### Funktion logdel, loescht die Log Dateien.
# logdel Verzeichnis
# Beispiel-Example: logdel sim1
function logdel()
{
    if [ -d "$1" ]; then
      echo "$(tput setaf 1)OpenSim: $(tput setab 7)OpenSimulator log $1 geloescht$(tput sgr 0)"
      #cd /$STARTVERZEICHNIS/"$1"/bin || exit
      #rm *.log
      rm /$STARTVERZEICHNIS/"$1"/bin/*.log
    else
      echo "$(tput setaf 1)logs nicht gefunden $(tput sgr 0)"
    fi
}

### Funktion ossettings, stellt den Linux Server fuer OpenSim ein.
function ossettings()
{
    # Hier kommen alle gewünschten Einstellungen rein die nach einem Reboot gemacht werden muessen.
    echo "ulimit -s 1048576"
    ulimit -s 1048576
    echo "minor=split,promotion-age=14,nursery-size=64m"
    export MONO_GC_PARAMS="minor=split,promotion-age=14,nursery-size=64m"
}

### Funktion screenlist, Laufende Screens auflisten.
function screenlist()
{
    echo "$(tput setaf 2) Laufende Screens auflisten! $(tput sgr 0)"
    screen -ls
}

### Funktion autostarttimer refresh
# autostarttimer Zeit
# autostarttimer "tomorrow 5:00"
function autostarttimer()
{    
# Moegliche Eingaben sind: HH:MM, HH:MM:SS, "YYYY-MM-DD HH:MM", "tomorrow 11:00", 100sec, 30min, 20hours, "1hours 15min", ...
    screen -S RESTART -X quit
    cd /$STARTVERZEICHNIS || exit    
    screen -fa -S RESTART -d -U -m ./osautorestart.sh "$1"
    echo "RESTART start $1"
}

### Funktion osstart, startet Region Server.
# osstart screen_name
# Beispiel-Example: osstart sim1
function osstart()
{
    if [ -d "$1" ]; then
      echo "$(tput setaf 2)OpenSim: $(tput setab 7)Regionen OpenSimulator $1 Starten$(tput sgr 0)"
      cd /$STARTVERZEICHNIS/"$1"/bin || exit
      screen -fa -S "$1" -d -U -m mono OpenSim.exe
      sleep 10
    else
      echo "$(tput setaf 1)OpenSim: $(tput setab 3)Regionen OpenSimulator $1 nicht vorhanden$(tput sgr 0)"
    fi    
}

### Funktion rostart, Robust Server starten.
function rostart()
{
    if checkfile /$STARTVERZEICHNIS/robust/bin/Robust.exe; then
      echo "$(tput setaf 2)OpenSim: $(tput setab 7)Robust Start$(tput sgr 0)"
      cd /$STARTVERZEICHNIS/robust/bin || exit
      screen -fa -S RO -d -U -m mono Robust.exe
      sleep $WARTEZEIT
    else
      echo "$(tput setaf 2)Robust wurde nicht gefunden.$(tput sgr 0)"
    fi
}

### Funktion rostop, Robust Server herunterfahren.
function rostop()
{
    if screen -list | grep -q "RO"; then
      echo "$(tput setaf 1)OpenSim: $(tput setab 7)RobustServer Beenden$(tput sgr 0)"
      screen -S RO -p 0 -X eval "stuff 'shutdown'^M"
      sleep $WARTEZEIT
    else
      echo "$(tput setaf 1)OpenSim: $(tput setab 7)RobustServer nicht vorhanden$(tput sgr 0)"
    fi    
}

### Funktion mostart, Money Server starten.
function mostart()
{
    if checkfile /$STARTVERZEICHNIS/robust/bin/MoneyServer.exe; then
      echo "$(tput setaf 2)OpenSim: $(tput setab 7)MoneyServer Start$(tput sgr 0)"
      cd /$STARTVERZEICHNIS/robust/bin || exit
      screen -fa -S MO -d -U -m mono MoneyServer.exe
      sleep $MONEYWARTEZEIT
    else
      echo "$(tput setaf 2)MoneyServer wurde nicht gefunden.$(tput sgr 0)"
    fi
}

### Funktion mostop, Money Server herunterfahren.
function mostop()
{
    if screen -list | grep -q "MO"; then
      echo "$(tput setaf 1)OpenSim: $(tput setab 7)MoneyServer Beenden$(tput sgr 0)"
      screen -S MO -p 0 -X eval "stuff 'shutdown'^M"
      sleep $MONEYWARTEZEIT
    else
      echo "$(tput setaf 1)OpenSim: $(tput setab 7)MoneyServer nicht vorhanden$(tput sgr 0)"
    fi    
}

### Funktion osstop, stoppt Region Server.
# osstop screen_name
# Beispiel-Example: osstop sim1
function osstop()
{
    if screen -list | grep -q "$1"; then
      echo "$(tput setaf 1)OpenSim: $(tput setab 7)Regionen OpenSimulator $1 Beenden$(tput sgr 0)"
      screen -S "$1" -p 0 -X eval "stuff 'shutdown'^M"
    else
      echo "$(tput setaf 1)OpenSim: $(tput setab 7)Regionen OpenSimulator $1 nicht vorhanden$(tput sgr 0)"
    fi
    sleep 10
}

### Funktion osscreenstop, beendet Screeens.
# osscreenstop screen_name
# Beispiel-Example: osscreenstop sim1
function osscreenstop()
{
    if screen -list | grep -q "$1"; then
      echo "$(tput setaf 1)OpenSim: $(tput setab 7)Screeen $1 Beenden$(tput sgr 0)"
      screen -S "$1" -X quit
    else
      echo "$(tput setaf 1)OpenSim: $(tput setab 7)Screeen $1 nicht vorhanden$(tput sgr 0)"
    fi
    echo "No screen session found. Ist hier kein Fehler, sondern ein Beweis, das alles zuvor sauber heruntergefahren wurde."
    echo "Exit Status: $?"
}

### Funktion gridstart, startet Robust und Money
function gridstart()
{
    if screen -list | grep -q RO; then
        echo "$(tput setaf 1)OpenSim: $(tput setab 7)RobustServer läuft bereits $(tput sgr 0)"
    else
        #echo "$(tput setaf 1)RobustServer läuft nicht $(tput sgr 0)"
          rostart
    fi

    if screen -list | grep -q MO; then
        echo "$(tput setaf 1)OpenSim: $(tput setab 7)MoneyServer läuft bereits $(tput sgr 0)"
    else
        #echo "$(tput setaf 1)MoneyServer läuft nicht $(tput sgr 0)"
        mostart
    fi
}

### Funktion gridstop, stoppt Robust und Money
function gridstop()
{
    if screen -list | grep -q RO; then
        #echo "$(tput setaf 1)RobustServer läuft bereits $(tput sgr 0)"
        rostop
    else
        echo "$(tput setaf 1)RobustServer läuft nicht $(tput sgr 0)"
    fi

    if screen -list | grep -q MO; then
        #echo "$(tput setaf 1)MoneyServer läuft bereits $(tput sgr 0)"
        mostop
    else
        echo "$(tput setaf 1)MoneyServer läuft nicht $(tput sgr 0)"
    fi
}

### Funktion autosimstart
function autosimstart()
{
    cd /$STARTVERZEICHNIS || exit
    item_re="^(Item.*):$"
    while read -r; do
        if [[ $REPLY =~ $item_re ]]; then
            item=${BASH_REMATCH[1]}
        else            
            # Ausfuehrung der gelisteten Regionen hier einfach die ausgabe als Text.
            ROHDATEN="$item $REPLY"
            VERZEICHNIS=${ROHDATEN// /} # Leerzeichen entfernen
            echo "$(tput setaf 2)OpenSim: $(tput setab 7)Regionen OpenSimulator $VERZEICHNIS Starten$(tput sgr 0)"
            cd /$STARTVERZEICHNIS/"$VERZEICHNIS"/bin || exit
            screen -fa -S "$VERZEICHNIS" -d -U -m mono OpenSim.exe
            
            # Eventuell wartezeit einfuegen!
            sleep $STARTWARTEZEIT
        fi
    done < /$STARTVERZEICHNIS/SimulatorList.ini
}

### Funktion autosimstop
function autosimstop()
{
    item_re="^(Item.*):$"
    while read -r; do
        if [[ $REPLY =~ $item_re ]]; then
            item=${BASH_REMATCH[1]}
        else            
            ROHDATEN="$item $REPLY"
            VERZEICHNIS=${ROHDATEN// /} # Leerzeichen entfernen
            echo "$(tput setaf 1)OpenSim: $(tput setab 7)Regionen OpenSimulator $VERZEICHNIS Beenden$(tput sgr 0)"
            screen -S "$VERZEICHNIS" -p 0 -X eval "stuff 'shutdown'^M"
            sleep $STOPWARTEZEIT
        fi
    done < SimulatorList.ini
}

### Funktion terminator
function terminator()
{
    echo "hasta la vista baby"
    killall screen
    screen -ls    
}

### Funktion autoscreenstop
function autoscreenstop()
{
    item_re="^(Item.*):$"
    while read -r; do
        if [[ $REPLY =~ $item_re ]]; then
            item=${BASH_REMATCH[1]}
        else            
            # Ausfuehrung der gelisteten Regionen hier einfach die ausgabe als Text.
            ROHDATEN="$item $REPLY"
            VERZEICHNIS=${ROHDATEN// /} # Leerzeichen entfernen
            screen -S "$VERZEICHNIS" -X quit
        fi
    done < SimulatorList.ini

    screen -S MO -X quit
    screen -S RO -X quit
    screen -S RESTART -X quit
}

### Funktion autologdel
function autologdel()
{
    item_re="^(Item.*):$"
    while read -r; do
        if [[ $REPLY =~ $item_re ]]; then
            item=${BASH_REMATCH[1]}
        else                    
            ROHDATEN="$item $REPLY"
            VERZEICHNIS=${ROHDATEN// /} # Leerzeichen entfernen
            echo "$(tput setaf 1)OpenSim: $(tput setab 7)OpenSimulator log $VERZEICHNIS geloescht$(tput sgr 0)"
            #cd /$STARTVERZEICHNIS/"$VERZEICHNIS"/bin || exit
            rm /$STARTVERZEICHNIS/"$VERZEICHNIS"/bin/*.log
        fi
    done < SimulatorList.ini

    logdel robust
}

### Funktion automapdel
function automapdel()
{
    item_re="^(Item.*):$"
    while read -r; do
        if [[ $REPLY =~ $item_re ]]; then
            item=${BASH_REMATCH[1]}
        else                    
            ROHDATEN="$item $REPLY"
            VERZEICHNIS=${ROHDATEN// /} # Leerzeichen entfernen
            echo "$(tput setaf 1)OpenSim: $(tput setab 7)OpenSimulator maptile $VERZEICHNIS geloescht$(tput sgr 0)"
            cd /$STARTVERZEICHNIS/"$VERZEICHNIS"/bin || exit
            rm -r maptiles/*
        fi
    done < SimulatorList.ini

    logdel robust
}

### Funktion autostart
function autostart()
{
    echo "$(tput setab 2)Starte alles! $(tput sgr 0)"
    gridstart
    autosimstart
}

### Funktion autostop
function autostop()
{
    echo "$(tput setab 1)Stoppe alles! $(tput sgr 0)"
    autosimstop
    gridstop
    echo "60 Sekunden warten bis die Simulatoren heruntergefahren sind!"
    sleep 60
    echo " "
    echo "$(tput setab 1)Beende alle noch offenen Screens! $(tput sgr 0)"
    autoscreenstop
}

### Funktion autorestart
function autorestart()
{
    echo "$(tput setab 1)Stoppe alles! $(tput sgr 0)"
    autosimstop
    gridstop
    echo "60 Sekunden warten bis die Simulatoren heruntergefahren sind!"
    sleep 60
    echo " "
    echo "$(tput setab 1)Beende alle noch offenen Screens! $(tput sgr 0)"
    autoscreenstop
    echo " "
    echo "$(tput setab 1)Log Dateinen löschen! $(tput sgr 0)"
    autologdel
    echo " "
    echo "$(tput setab 2)Einstellungen setzen! $(tput sgr 0)"
    ossettings
    echo " "
    echo "$(tput setab 2)Starte alles! $(tput sgr 0)"
    gridstart
    autosimstart
    #echo " "
    #echo "$(tput setab 2)Setze Autostarttimer neu! $(tput sgr 0)"
    #autostarttimer "tomorrow 4:00"
    echo " "
    screenlist
}

### Funktion hilfe
function hilfe()
{
echo "$(tput setab 2)Funktion:        Parameter:        Informationen: $(tput sgr 0)"
echo "assetdel         - screen_name Regionsname Objektname - Einzelnes Asset löschen."
echo "autologdel        - hat keine Parameter - Löscht alle Log Dateien."
echo "automapdel        - hat keine Parameter - Löscht alle Map Karten."
echo "autorestart         - hat keine Parameter - Startet das gesammte Grid neu."
echo "autoscreenstop        - hat keine Parameter - Killt alle OpenSim Screens."
echo "autostart         - hat keine Parameter - Startet das gesammte Grid."
echo "autostop         - hat keine Parameter - Stoppt das gesammte Grid."
echo "autosimstart         - hat keine Parameter - Startet alle Regionen."
echo "autostarttimer         - HH:MM, HH:MM:SS, YYYY-MM-DD HH:MM, tomorrow 11:00, 100sec, 30min, 20hours, 1hours 15min - setzt autotimer neu."
echo "autosimstop         - hat keine Parameter - Beendet alle Regionen. "
echo "gridstart         - hat keine Parameter - Startet Robust und Money. "
echo "gridstop         - hat keine Parameter - Beendet Robust und Money. "
echo "hilfe             - hat keine Parameter - Diese Hilfe."
echo "logdel             - Verzeichnisname - Löscht einzelne Simulator Log Dateien."
echo "mapdel             - Verzeichnisname - Löscht einzelne Simulator Map-Karten."
echo "mostart         - hat keine Parameter - Startet Money Server."
echo "mostop             - hat keine Parameter - Stoppt Money Server."
echo "settings         - hat keine Parameter - setzt Linux Einstellungen."
echo "osstart         - Verzeichnisname - Startet einzelnen Simulator."
echo "osstop             - Verzeichnisname - Stoppt einzelnen Simulator."
echo "rostart         - hat keine Parameter - Startet Robust Server."
echo "rostop             - hat keine Parameter - Stoppt Robust Server."
echo "terminator             - hat keine Parameter - Killt alle laufenden Screens."
echo "works             - Verzeichnisname - Einzelne screens auf Existens prüfen."
}

### Eingabeauswertung:
case  $KOMMANDO  in
    r | restart) autorestart ;;
    autosimstart | simstart) autosimstart ;;
    autosimstop | simstop) autosimstop ;;
    astart | autostart | start) autotart ;;
    astop | autostop | stop) autostop ;;
    amd | automapdel) automapdel ;;
    ald | autologdel) autologdel ;;
    set | settings)    ossettings ;;
    t | timer)    autostarttimer "$2" ;;
    rs | robuststart | rostart) rostart ;;
    ms | moneystart | mostart) mostart ;;
    robuststop | rostop) rostop ;;
    moneystop | mostop) mostop ;;
    osstop) osstop "$2" ;;
    osstart) osstart "$2" ;;
    gridstart) gridstart ;;
    gridstop) gridstop ;;
    sd | screendel | autoscreenstop) autoscreenstop ;;
    l | list) screenlist ;;
    w | works) works "$2" ;;
    md | mapdel) mapdel "$2" ;;
    ld | logdel) logdel "$2" ;;
    ss | osscreenstop) osscreenstop "$2" ;;
    h | hilfe) hilfe ;;
    assetdel) assetdel "$2" "$3" "$4" ;;
    terminator) terminator ;;
    *) hilfe ;;
esac












SimulatorList.ini







Code:
sim1
sim2
sim3
sim4
sim5
sim6
sim7








osautorestart.sh



Code:
#!/bin/bash
STARTVERZEICHNIS="opt"
cd /$STARTVERZEICHNIS || exit
sleep 1

# ./osautorestart.sh <Zeitspanne|Uhrzeit> <Datei>
# <Zeitspanne|Uhrzeit> kann durch die Zeitspanne oder Uhrzeit, zu bzw. nach dem man neustarten möchte, ersetzt werden.
# Mögliche Eingaben sind: HH:MM, HH:MM:SS, "YYYY-MM-DD HH:MM", "tomorrow 11:00", 100sec, 30min, 20hours, "1hours 15min", ...
# Gestartet wird dies zum Beispiel so:
# screen -fa -S RESTART -d -U -m ./osautorestart.sh "tomorrow 5:00"

echo "RESTART WARTEN"

if [ "$1" ]
then
    zeit="$1"
else
    # Keine Zeitangabe?
    echo "Wann soll der OpenSimulator neu gestartet werden?"
    read -r zeit
fi

jetzt=$(date +%s) # Zeit jetzt, in Sekunden seit 1970
spaeter=$(date -d "$zeit" +%s) # Zeit für die Ausführung des Befehls, in Sekunden seit 1970
# spaeterlesbar=$(date -d "$zeit" +%Y-%m-%d-%H:%M:%S) # menschenlesbare Zeit
sleepsekunden=$((spaeter - jetzt)) # Zeit in Sekunden für sleep

sleep $sleepsekunden


# Ab hier, der gesamte ablauf.
/$STARTVERZEICHNIS/opensim.sh restart



RE: Läuft mein OpenSim im screen oder nicht? - Manni - 05-03-2021

Oh man mit Visual Studio Code der Shell/Bash Erweiterung samt Lint hab direkt mal 50 Fehler ausgemerzt.
Dazu habe ich das jetzt so gemacht, das man oben in den Einstellungen direkt sagen kann in welchem Verzeichnis der OpenSimulator ist, in opt oder home zum Beispiel.
Der OpenSimulator muss die Original Verzeichnisstruktur haben also opensim/bin.
Solltet ihr hingegangen sein und das bin Verzeichnis genommen und umbenannt haben muss im Script die ganze Verzeichnisstruktur geändert werden.
Das Hauptverzeichnis ist gleichzeitig der Screen Name.
Robust und Money müssen im Verzeichnis robust sein, die Screennamen sind dann RO und MO.
Bei Money wird geschaut ob im Verzeichnis /robust die Datei MoneyServer.exe vorhanden ist, wenn vorhanden wird Money gestartet ansonsten wird es ignoriert.

TODO:
autorestart funktioniert unter umständen nicht.