Hallo,
ich bräuchte ein funktionierendes Start Script für meinen Arma3 Altis Life Server. Es geht um einen vLinux ubuntu Server und mein startscript funktioniert nicht. Gibt es da ein gutes, öffentliches?

Arma 3 Startscript
-
Luca1308 -
26. Februar 2020 um 00:34 -
Erledigt
-
-
Schick doch bitte mal deins rein und sag uns was nicht funktioniert
Vlt hat Henne was für dich
-
Danke fürs erwähnen blackfisch.
Wie blackfisch schon geschrieben hat. Was hast du denn bisher?
Wäre gelacht wenn wir das nicht beheben können.
Ansonsten sende ich meine rein.
-
Jepp, finden bestimmt eine Lösung
-
hier ist das startscript ich habe versucht es auf mich umzuschreiben allerdings hat es ja leider nicht funktioniert
-
Spoiler anzeigen
Bash
Alles anzeigen#!/bin/bash PATH=/bin:/usr/bin:/sbin:/usr/sbin # Hier anpassen # DATE=$(date +%Y-%m-%d_%H-%M-%S); LOGNAME="LIFE" LOG="${DATE}_${LOGNAME}" logPath= /home/luca/Steam/logs/Arma3logs.txt serverConfigDir= /home/luca/Steam/steamapps/common/Arma_3_Server/config/server.cfg homePath= /home/luca/Steam/steamapps/common/Arma_3_Server missionPath= /home/luca/Steam/steamapps/common/Arma_3_Server/mpmissions/Altis_Life.Altis.pbo lifePath= /home/luca/Steam/steamapps/common/Arma_3_Server/@life_server/addons/life_server.pbo safeMissionPath= /home/luca/Steam/SafeMission/mission/mission.sqf safeLifePath= /home/luca/Steam/SafeMission/life/Arma3life.sql safeConfigPath= /home/luca/Steam/SafeMission/config/Arma3config.cfg uploadPath=/home /luca/Steam/steamapps/common/Arma_3_Server/mpmissions # networkConfig=$serverConfigDir/basic.cfg serverConfig=$serverConfigDir/server.cfg profileName=life DIR=/home/Steam/steamapps/Arma 3 Server/mpmissions/Altis_Life.Altis servermods=@marma mods=@extDB2\;@life_server BE=$DIR/battleye DAEMON= Arma3Server NAME=arma3lifeserver PARAMS="-cfg=$networkConfig -config=$serverConfig -name=$profileName -servermod=$servermods -mod=$mods -bepath=$BE -world=empty -port=2302 -noSound -loadMissionToMemory -enableHT -autoinit" DESC="ArmA 3 Lifeserver" # # Ab hier nichts mehr ändern case "$1" in start) echo "Starte: $DESC" if [ -e $DIR ]; then cd $DIR ./ $DAEMON $PARAMS else echo "Verzeichnis $DIR nicht gefunden!" fi ;; startLoad) echo "Wechsle Missionsdatei und starte: $DESC" cd $missionPath mv Altis_Life.Altis.pbo $safeMissionPath cd $safeMissionPath mv Altis_Life.Altis.pbo ${DATE}-Altis_Life.Altis.pbo cd $lifePath mv life_server.pbo $safeLifePath cd $safeLifePath mv life_server.pbo ${DATE}-life_server.pbo cd $homePath mv serverconfig $safeConfigPath cd $safeConfigPath mv serverconfig ${DATE}-serverconfig cd $uploadPath cp Altis_Life.Altis.pbo $missionPath cp life_server.pbo $lifePath cp -r serverconfig $homePath if [ -e $DIR ]; then cd $DIR ./$DAEMON $PARAMS >$logPath/${LOG}.rpt 2>&1 else echo "Verzeichnis $DIR nicht gefunden!" fi ;; stop) if [[ `pidof $NAME` > "0" ]] then echo -n "Stoppe: $DESC" kill `pidof $NAME |awk -F . '{print $1}'|awk '{print $1}'` echo " ... fertig." else echo "Kein $DESC gefunden" fi ;; restart) if [[ `pidof $NAME` > "0" ]] then echo -n "Stoppe: $DESC" kill `pidof $NAME |awk -F . '{print $1}'|awk '{print $1}'` echo " ... fertig." else echo "Kein $DESC gefunden" fi echo -n "Starte: $DESC" cd $DIR ./$DAEMON $PARAMS echo " ... fertig." ;; restartLoad) if [[ `pidof $NAME` > "0" ]] then echo -n "Stoppe: $DESC" kill `pidof $NAME |awk -F . '{print $1}'|awk '{print $1}'` echo " ... fertig." else echo "Kein $DESC gefunden" fi echo -n "Wechsle Missionsdatei und starte: $DESC" cd $missionPath mv Altis_Life.Altis.pbo $safeMissionPath cd $safeMissionPath mv Altis_Life.Altis.pbo ${DATE}-Altis_Life.Altis.pbo cd $lifePath mv life_server.pbo $safeLifePath cd $safeLifePath mv life_server.pbo ${DATE}-life_server.pbo cd $homePath mv serverconfig $safeConfigPath cd $safeConfigPath mv serverconfig ${DATE}-serverconfig cd $uploadPath cp Altis_Life.Altis.pbo $missionPath cp life_server.pbo $lifePath cp -r serverconfig $homePath cd $DIR ./$DAEMON $PARAMS >$logPath/${LOG}.rpt 2>&1 echo " ... fertig." ;; status) if [[ `pidof $NAME` > "0" ]] then echo "$DESC ist ONLINE" else echo "$DESC ist OFFLINE" fi ;; crash) if [[ `pidof $NAME` > "0" ]] then echo "Server läuft" else echo "Server nicht gefunden, neustarten ..." cd $DIR ./$DAEMON $PARAMS fi ;; *) echo "Benutzung: $0 {start|startLoad|stop|status|restart|restartLoad|crash}" exit 1 ;; esac exit 0
-
-
Oh weh, du nutzt noch nicht lange Linux oder?
Fangen wir mal mit einigen Grundlagen an:
- Linux achtet auf Groß- und Kleinschreibung, daher ist immer auf die richtige Schreibweiße zu achten.
- Leerzeichen werden als Ende eines Parameters erkannt.
Möchtest du also in ein Verzeichniss wechseln (in deinem Fall: Arma 3 Server), dann sollte der komplette Pfad als String deklariert werden (in "" schreiben).
Also so: Zeile 20: DIR="/home/Steam/steamapps/Arma 3 Server/mpmissions/Altis_Life.Altis"
Ich empfinde es also immer als schlechten Stil Leerzeichen in Verzeichnissen zu verwenden.
Machen wir bei dem Script weiter:
Gab es zu dem Script keine Anleitung? Wenn schon, ist es empfehlenswert diese auch zu lesen.
Denn die Parameter sind absolut falsch angegeben (dabei kenne ich das Script nichtmal).Code: Deine Parameter
Alles anzeigenlogPath= /home/luca/Steam/logs/Arma3logs.txt serverConfigDir= /home/luca/Steam/steamapps/common/Arma_3_Server/config/server.cfg homePath= /home/luca/Steam/steamapps/common/Arma_3_Server missionPath= /home/luca/Steam/steamapps/common/Arma_3_Server/mpmissions/Altis_Life.Altis.pbo lifePath= /home/luca/Steam/steamapps/common/Arma_3_Server/@life_server/addons/life_server.pbo safeMissionPath= /home/luca/Steam/SafeMission/mission/mission.sqf safeLifePath= /home/luca/Steam/SafeMission/life/Arma3life.sql safeConfigPath= /home/luca/Steam/SafeMission/config/Arma3config.cfg uploadPath=/home /luca/Steam/steamapps/common/Arma_3_Server/mpmissions # networkConfig=$serverConfigDir/basic.cfg serverConfig=$serverConfigDir/server.cfg profileName=life DIR=/home/Steam/steamapps/Arma 3 Server/mpmissions/Altis_Life.Altis servermods=@marma mods=@extDB2\;@life_server BE=$DIR/battleye DAEMON= Arma3Server NAME=arma3lifeserver PARAMS="-cfg=$networkConfig -config=$serverConfig -name=$profileName -servermod=$servermods -mod=$mods -bepath=$BE -world=empty -port=2302 -noSound -loadMissionToMemory -enableHT -autoinit" DESC="ArmA 3 Lifeserver"
Nehmen wir mal die Parameter auseinander:
- logPath= /home/luca/Steam/logs/Arma3logs.txt
Da steht "logPath". Du gibst aber eine Datei an (oder ist der Name deines Log-Verzeichnisses wirklich Arma3logs.txt ?).
Zudem muss das Leerzeichen entfernt werden.
Ich würde das Verzeichniss für die Logs auch in den Server setzen. Da ansonsten irgendwann schwer nachvollziehbar ist, zu welchem Server die Log gehört.
Richtig ist also: logPath=/home/luca/Steam/logs - serverConfigDir= /home/luca/Steam/steamapps/common/Arma_3_Server/config/server.cfg
Was stellen wir fest? Da steht "serverConfigDir". Du gibst aber wieder eine Datei an.
Auch hier ist wieder ein Leerzeichen zuviel.
Richtig ist also: serverConfigDir=/home/luca/Steam/steamapps/common/Arma_3_Server/config - homePath= /home/luca/Steam/steamapps/common/Arma_3_Server
Du setzt anscheinend gerne Leerzeichen.
Richtig ist also: homePath=/home/luca/Steam/steamapps/common/Arma_3_Server - missionPath= /home/luca/Steam/steamapps/common/Arma_3_Server/mpmissions/Altis_Life.Altis.pbo
Die Leerzeichen wiederholen sich. Ebenso deine Angabe von Dateien, obwohl immer Verzeichnisse gefordert sind.
Richtig ist also: missionPath=/home/luca/Steam/steamapps/common/Arma_3_Server/mpmissions - lifePath= /home/luca/Steam/steamapps/common/Arma_3_Server/@life_server/addons/life_server.pbo
Siehe oben.
Richtig ist also: lifePath=/home/luca/Steam/steamapps/common/Arma_3_Server/@life_server/addons - safeMissionPath= /home/luca/Steam/SafeMission/mission/mission.sqf
Wie kommt man darauf hier eine mission.sqf anzugeben?
Richtig ist also: safeMissionPath=/home/luca/Steam/SafeMission/mission - safeLifePath= /home/luca/Steam/SafeMission/life/Arma3life.sql
Oben eine .sqf, hier plötzlich eine .sqf?
Richtig ist also: safeLifePath=/home/luca/Steam/SafeMission/life - safeConfigPath= /home/luca/Steam/SafeMission/config/Arma3config.cfg
Eine .cfg macht es auch nicht besser.
Richtig ist also: safeConfigPath=/home/luca/Steam/SafeMission/config - uploadPath=/home /luca/Steam/steamapps/common/Arma_3_Server/mpmissions
Dieses mal ist vorne zwar kein Leerzeichen, dafür direkt nach home.
Dafür ist es diesmal wirklich ein Pfad und keine Datei. Gut gemacht.
Ich empfinde es als sinnbefreit wenn der uploadPath identisch mit dem missionPath ist.
Ist aber deine Entscheidung.
Richtig ist also: uploadPath=/home/luca/Steam/steamapps/common/Arma_3_Server/mpmissions - serverConfig=$serverConfigDir/server.cfg
Sehr gut. Der Parameter ist fehlerfrei. - profileName=life
Da abhänig von deinen Wünschen, überspringe ich den Parameter.
Der Parameter ist aber richtig angegeben. - DIR=/home/Steam/steamapps/Arma 3 Server/mpmissions/Altis_Life.Altis
Hier sind Leerzeichen im Pfad vorhanden. Außerdem ist wieder eine Datei angegeben und kein Verzeichniss.
Nun kommen wir zu einem kleinen Mysterium.
Hier gibst du als Pfad /home/Steam/steamapps/Arma 3 Server an.
Die oberen Angaben enthalten immer /home/luca/Steam/steamapps/common/Arma_3_Server.
Was ist denn nun richtig? Ich nehme mal die obere Angabe an.
Richtig ist also: DIR=/home/luca/Steam/steamapps/common/Arma_3_Server - servermods=@marma
Was für eine Mod ist das denn?
Wird die nur auf dem Server benötigt, oder muss der Client die auch laden?
Je nachdem, ist die Angabe richtig, oder eben falsch. - mods=@extDB2\;@life_server
Das sind beides Mods die nur auf dem Server geladen werden müssen.
Daher gehören diese auf jeden Fall in die servermods.
Auch ist es je nach Version abhängig, ob du wirklich noch extDB2 verwenden musst, oder eben doch extDB3.
Richtig ist also: mods="" und servermods="@extDB2;@life_server;@marma" - BE=$DIR/battleye
Ist zwar richtig. Aber unnötig anzugeben, da Arma diesen Pfad standardmäßig lädt. - DAEMON= Arma3Server
Hat doch jetzt öfters geklappt.
Hier hast du wieder ein Leerzeichen drin.
Außerdem bezweifel ich, dass die Datei "Arma3Server" heißt. Wahrscheinlicher ist: "arma3server"
Richtig ist also: DAEMON=arma3server - NAME=arma3lifeserver
Abhängig von deinen Wünschen ist es richtig. - PARAMS="-cfg=$networkConfig -config=$serverConfig -name=$profileName -servermod=$servermods -mod=$mods -bepath=$BE -world=empty -port=2302 -noSound -loadMissionToMemory -enableHT -autoinit"
Wie schon angesprochen, empfinde ich einige Parameter als überflüssig, bzw. einige fehlen.
Dazu kann ich nur die Dokumentation empfehlen: https://community.bistudio.com/wiki/Arma_3_Startup_Parameters
Vorallem hast du die networkConfig auskommentiert. Aber in PARAMS wird der Parameter noch aufgerufen und genutzt.
Meine Empfehlung für den Anfang: PARAMS="-config=$serverConfig -profiles=$profilePath -name=$profileName -servermod=$servermods -mod=$mods -port=2302 -loadMissionToMemory -enableHT -autoinit"
Weiter wird dann folgender Parameter noch benötigt: profilePath=<PROFILEPATH> - DESC="ArmA 3 Lifeserver"
Abhängig von deinen Wünschen ist es richtig.
Fassen wir nun diese Parameter zusammen und verbessern das Script noch gleich ein wenig:
Code
Alles anzeigenDIR=/home/luca/Steam/steamapps/common/Arma_3_Server homePath=$DIR serverConfigDir=$DIR/config missionPath=$DIR/mpmissions lifePath=$DIR/@life_server/addons logPath=$DIR/logs safeMissionPath=/home/luca/Steam/SafeMission/mission safeLifePath=/home/luca/Steam/SafeMission/life safeConfigPath=/home/luca/Steam/SafeMission/config uploadPath=/home/luca/Steam/steamapps/common/Arma_3_Server/mpmissions DAEMON=arma3server serverConfig=$serverConfigDir/server.cfg profilePath=$DIR/profiles profileName=life servermods="@extDB2;@life_server;@marma" mods="" PARAMS="-config=$serverConfig -profiles=$profilePath -name=$profileName -servermod=$servermods -mod=$mods -port=2302 -loadMissionToMemory -enableHT -autoinit" NAME=arma3lifeserver DESC="ArmA 3 Lifeserver"
Es wird gleich ersichtlich, dass die Parameter besser lesbar sind und vorallem in einer sinnvolleren Reihenfolge aufgeführt sind.
Ich verstehe den Sinn von diesem Abschnitt noch nicht ganz:
Code
Alles anzeigenecho "Wechsle Missionsdatei und starte: $DESC" cd $missionPath mv Altis_Life.Altis.pbo $safeMissionPath cd $safeMissionPath mv Altis_Life.Altis.pbo ${DATE}-Altis_Life.Altis.pbo cd $lifePath mv life_server.pbo $safeLifePath cd $safeLifePath mv life_server.pbo ${DATE}-life_server.pbo cd $homePath mv serverconfig $safeConfigPath cd $safeConfigPath mv serverconfig ${DATE}-serverconfig cd $uploadPath cp Altis_Life.Altis.pbo $missionPath cp life_server.pbo $lifePath cp -r serverconfig $homePath
Mir ist klar, dass dadurch die Mission, life_server und Config kopiert wird. Allerdings wird die ja bei jedem neustart kopiert.
Das ist nur unnötiger Datenmüll, der schlussendlich auch noch schwer zu überblicken ist.
Hier wird auch ersichtlich, warum es sinnbefreit ist, den uploadPath und den missionPath identisch gesetzt zu haben.
Denn die Mission wird aus uploadPath, nach missionPath kopiert. Da dies das selbe Verzeichniss ist, passiert also nichts.
Vorallem wird bei einem upload, immer gleich die neue Mission "gesichert".
-
-
-
hier ist nochmal das ganze script vielleicht kannst du das so überarbeiten das ich das so übernehmen kann wäre sehr nett
Bash
Alles anzeigen#!/bin/bash PATH=/bin:/usr/bin:/sbin:/usr/sbin # Hier anpassen # DATE=$(date +%Y-%m-%d_%H-%M-%S); LOGNAME="LIFE" LOG="${DATE}_${LOGNAME}" logPath=$DIR/logs serverConfigDir=$DIR/config homePath= $DIR missionPath=$DIR/mpmissions lifePath=$DIR/@life_server/addons safeMissionPath=/home/luca/Steam/SafeMission/mission safeLifePath=/home/luca/Steam/SafeMission/life safeConfigPath=/home/luca/Steam/SafeMission/config uploadPath=/home/luca/Steam/steamapps/common/Arma_3_Server/mpmissions # networkConfig=$serverConfigDir/basic.cfg serverConfig=$serverConfigDir/server.cfg profileName=luca profilePath=$DIR/profiles DIR=/home/luca/Steam/steamapps/common/Arma_3_Server servermods="@extDB3;@life_server mods=@extDB2\;@life_server BE=$DIR/battleye DAEMON=arma3server NAME=arma3lifeserver PARAMS="-config=$serverConfig -profiles=$profilePath -name=$profileName -servermod=$servermods -mod=$mods -port=2302 -loadMissionToMemory -enableHT -autoinit" DESC="ArmA 3 Lifeserver" # # Ab hier nichts mehr ändern case "$1" in start) echo "Starte: $DESC" if [ -e $DIR ]; then cd $DIR ./$DAEMON $PARAMS else echo "Verzeichnis $DIR nicht gefunden!" fi ;; startLoad) echo "Wechsle Missionsdatei und starte: $DESC" cd $missionPath mv Altis_Life.Altis.pbo $safeMissionPath cd $safeMissionPath mv Altis_Life.Altis.pbo ${DATE}-Altis_Life.Altis.pbo cd $lifePath mv life_server.pbo $safeLifePath cd $safeLifePath mv life_server.pbo ${DATE}-life_server.pbo cd $homePath mv serverconfig $safeConfigPath cd $safeConfigPath mv serverconfig ${DATE}-serverconfig cd $uploadPath cp Altis_Life.Altis.pbo $missionPath cp life_server.pbo $lifePath cp -r serverconfig $homePath if [ -e $DIR ]; then cd $DIR ./$DAEMON $PARAMS >$logPath/${LOG}.rpt 2>&1 else echo "Verzeichnis $DIR nicht gefunden!" fi ;; stop) if [[ `pidof $NAME` > "0" ]] then echo -n "Stoppe: $DESC" kill `pidof $NAME |awk -F . '{print $1}'|awk '{print $1}'` echo " ... fertig." else echo "Kein $DESC gefunden" fi ;; restart) if [[ `pidof $NAME` > "0" ]] then echo -n "Stoppe: $DESC" kill `pidof $NAME |awk -F . '{print $1}'|awk '{print $1}'` echo " ... fertig." else echo "Kein $DESC gefunden" fi echo -n "Starte: $DESC" cd $DIR ./$DAEMON $PARAMS echo " ... fertig." ;; restartLoad) if [[ `pidof $NAME` > "0" ]] then echo -n "Stoppe: $DESC" kill `pidof $NAME |awk -F . '{print $1}'|awk '{print $1}'` echo " ... fertig." else echo "Kein $DESC gefunden" fi echo -n "Wechsle Missionsdatei und starte: $DESC" cd $missionPath mv Altis_Life.Altis.pbo $safeMissionPath cd $safeMissionPath mv Altis_Life.Altis.pbo ${DATE}-Altis_Life.Altis.pbo cd $lifePath mv life_server.pbo $safeLifePath cd $safeLifePath mv life_server.pbo ${DATE}-life_server.pbo cd $homePath mv serverconfig $safeConfigPath cd $safeConfigPath mv serverconfig ${DATE}-serverconfig cd $uploadPath cp Altis_Life.Altis.pbo $missionPath cp life_server.pbo $lifePath cp -r serverconfig $homePath cd $DIR ./$DAEMON $PARAMS >$logPath/${LOG}.rpt 2>&1 echo " ... fertig." ;; status) if [[ `pidof $NAME` > "0" ]] then echo "$DESC ist ONLINE" else echo "$DESC ist OFFLINE" fi ;; crash) if [[ `pidof $NAME` > "0" ]] then echo "Server läuft" else echo "Server nicht gefunden, neustarten ..." cd $DIR ./$DAEMON $PARAMS fi ;; *) echo "Benutzung: $0 "{start|startLoad|stop|status|restart|restartLoad|crash}" exit 1 ;; esac exit 0 ;
-
Mit dem Syntax-Highlightning ist gut zu erkennen, dass du bei servermods="@extDB3;@life_server ein " am Ende vergessen hast.
Außerdem lädst du jetzt extDB2 und extDB3. Sowieso den life_server zweimal.
-
-
Ich starte die Server ebenfalls mit dem Parameter: ./$SERVERFILE $PARAM
Das funktioniert ohne Probleme.
Was für Rechte sind denn arma3server gesetzt?
Wem gehört arma3server (user und gruppe)?
Mit welchem Nutzer bist du angemeldet?
Mal versucht einfach direkt in der Konsole den Server zu starten?
-
-
Mal versucht einfach direkt in der Konsole den Server zu starten?
-
wie mache ich das?
ich weiß leider nicht wo sie ist
-
wie mache ich das?
ich weiß leider nicht wo sie ist
Du weisst weisst nicht Wo die Console ist? *grübel*
Hast du eine Desktop Umgebung am laufen ?
Es scheint ja wirklich so zu sein, das du von Linux keinen Schimmer hast
Evtl. liest du dich mal etwas ein -> https://www.debian.org/doc/manuals/maint-guide/start.de.htmlÜbrigens, da wo das stand - ist die CONSOLE
-
@Henne079 könntest du dein script vielleicht hier reinschicken wäre nett
-
Dies ist nur ein Test!
-