TrackMania Dedicated Server – Autostart (Systemdienst)

Ein TrackMania Dedicated Server startet nicht von alleine und kann sich auch nicht selbst neu Starten, sollte er einmal abgestürzt sein.
Das gilt für TM Nations / United Forever, TM2 und TrackMania 2020.
Daher müssen wir dem Server etwas auf die Sprünge helfen!

Wir lassen den Server ab sofort einfach als Service laufen.
Sollte dieser abstürzen, startet er sich von alleine neu, denn das System überwacht diesen Service.

Diese kurze Anleitung basiert auf Debian / Ubuntu.
Solltest du ein anderen System nutzen, sind die hier gezeigten Pfade ggf. etwas anders.

Los gehts!

Wir loggen uns als erstes mit dem Root-Account auf unserem Server ein. Denn nur mit diesem lassen sich Service-Dateien erstellen.

Wir wechseln in folgendes Verzeichnis:

cd /etc/systemd/system

TM-Server

Dort legen wir pro TM-Server den wir betreiben möchten, eine Servicedatei an.
Hier ein einfaches Beispiel:

nano tm2020.service

Wichtig hierbei ist, das die Datei mit .service endet!

In diese Datei fügen wir nun folgenden Code ein:

[Unit]
Description=TrackMania Autostart Script
After=mysql.service

[Service]
Type=forking
WorkingDirectory=/home/Pfad/zum/tm-server/
User=gameserver
Group=gameserver
ExecStart=/home/Pfad/zum/tm-server/TrackmaniaServer /game_settings=MatchSettings/tracklist.txt /dedicated_cfg=dedicated_cfg.txt /noautoquit
Restart=on-failure
RestartSec=10

[Install]
WantedBy=default.target

Was solltest du alles ändern?
Description= Gebe hier ein aussagekräftiger Titel an. Z.B. TM 2020 SpeedFun Server
WorkingDirectory= Gebe hier den Pfad zu deinem TrackMania-Server an
User= Gebe den Nutzernamen an, den du eigentlich zum starten des TM-Servers nutzt
Group= Gebe die Gruppe an, die die Berechtigungen auf den Gameserver hat, meist ist dies ebenfalls der gleiche Name wie der Nutzername
ExecStart= Gebe hier den Pfad zum TM-Server inkl. Startbefehl an. Den Startbefehl findest du ja in deiner Start.sh
Restart= Hier kannst du angeben, ob nur bei einem Crash der Server neu gestartet werden soll oder immer. on-failure ist bei einem Crash, immer neu starten schaffst du mit always.
RestartSec= Hier kannst du die Sekunden angeben, wann ein abgestürzter Server neu gestartet wird

Speichere alles ab. (STRG + X und Y mit Enter)

Nun müssen wir den Service noch aktivieren.
Dazu nutzen wir folgenden Befehl:

systemctl enable SERVICENAME.service

Ersetze SERVICENAME durch dein Dateinamen. Z.B. tm2020.service.

Gut!
Vergewissere dich jetzt, dass der Server aus ist.
Ist er aus, können wir ihn jetzt per Systemdienst starten.
Das können wir mit folgendem Befehl tun:

systemctl start SERVICENAME.service

Ersetze hier wieder SERVICENAME durch dein Dateinamen.
Wir sollten kein Feedback bekommen und direkt wieder etwas eingeben können.

Mit folgendem Befehl können wir überprüfen, wie es dem Server geht:

systemctl status SERVICENAME.service

Damit sind wir soweit für den TrackMania-Server durch!

xAseco

Wer jetzt noch gerne xAseco oder uAseco automatisiert starten möchte, kann das mit folgendem Service-Script tun:

[Unit]
Description=uAseco Autostart
After=mysql.service

[Service]
Type=simple
WorkingDirectory=/home/Pfad/zum/uAseco/
User=gameserver
Group=gameserver
ExecStart=/bin/php aseco.php TMN </dev/null >aseco.log 2>&1 &
Restart=on-failure
RestartSec=10

[Install]
WantedBy=default.target

Hinweis zum Schluss: Solltest du Anpassungen am Script vornehmen, installiere den Dienst wieder neu, damit die Anpassungen übernommen werden. Also den Befehl systemctl enable DIENSTNAME erneut abschicken.

PyPlanet

Auch für PyPlanet gibt es eine möglichkeit, das Ganze automatisch starten zu lassen.
Das bekommen wir mit diesem Script hin:

[Unit]
Description=PyPlanet Autostart Script
After=syslog.target network.target

[Service]
WorkingDirectory=/home/PFAD-ZU-DEINEM-CONFIG-ORDNER/py_planet
Environment="PYTHONPATH=/home/PFAD-ZU-DEINEM-CONFIG-ORDNER/py_planet"
ExecStart=/home/NUTZERNAME-MIT-DEM-PYPLANET-INSTALLIERT-WURDE/.pyenv/shims/pyplanet start --settings=settings
SyslogIdentifier=pyplanet

StandardOutput=syslog
StandardError=syslog
User=NUTZERNAME-MIT-DEM-PYPLANET-INSTALLIERT-WURDE
Group=NUTZERNAME-MIT-DEM-PYPLANET-INSTALLIERT-WURDE
Restart=on-failure
RestartSec=10


[Install]
WantedBy=multi-user.target

Hinweis: Damit das Script arbeitet, darf keine virtuelle Umgebung genutzt werden! Falls du PyPlanet damit installiert hast, lade dir PyPlanet außerhalb der virtuellen Umgebung mit dem dafür vorgesehenen Benutzer erneut herunter. Sonst wird PyPlanet nicht starten.


Besten Dank geht an der Stelle auch an eine Person raus, die mir die Scripte per Mail zukommen lassen hat.
Aus Datenschutzgründen schreibe ich jetzt mal den Namen hier nicht hin. Aber fühle dich gegrüßt!

5 Kommentare

  1. Ist es möglich, dass PyPlanat genau wie der TM-Server automatisch überwacht wird und wiederhergestellt wird?

  2. Hi Hörli,
    ich habe 2 Fragen … aber zuerst danke für deine ausführlichen Anleitungen …
    1. wie kann ich den Server aus schalten, um zB neue Strecken (die ich neu in die tracklist.txt eingetragen habe) dann auch zu aktivieren? pyplanet nur zu booten auf dem Server mit //reboot funzt nicht … sorry ich bin newbie ^^
    2. gibt es eine andere Möglichkeit Strecken neu auf den Server zu bekommen? //mx oder //tmx kennt pyplanet nicht oder was kannst Du mir für Tips geben? Danke
    Speedracer als RickAstragon

    • Hey Matthias,
      zu Punkt 1: Den Server kann man nur neu Starten, indem man den Prozess killt oder im Spiel per PyPlanet den Shutdown-Befehl nutzt. Anders gehts nicht. Ist doof, aber da muss Nadeo mal Hand anlegen und das einfacher gestalten. Ansonsten kannst du den Server als Dienst einbinden und dann per systemctl start und stop beidenen. (Eine Anleitung gibts hier auch dafür)
      zu Punkt 2: Soweit PyPlanet läuft, kannst du aktuell Maps in die tracklist.txt von Hand einfügen und die Liste per PyPlanet neu einlesen lassen. //readmaplist tracklist.txt
      Dann brauchst du kein Neustart und musst nur einmal zur nächsten Map springen. Schon stehen die neuen Strecken zur Verfügung.
      Soweit der Server ohne Erweiterungen läuft, hilft nur der Neustart. MX oder TMX geht noch nicht. Hoffe dass das bald gefixt wird, ich brauch das auch mal 😉

  3. Hi Hoerli!
    Erstmal: super Tutorials, mega!

    Nun zu meiner Frage: Du schreibst, man soll Pyplanet neu und ohne PyEnv installieren, um es autostarten zu können. Auf der Pyplanet-Seite steht allerdings, dass immer eine PyEnv benötigt wird… Jetzt bin ich verwirrt – und wie du somit schon richtig erraten hast, bekomme ich den Autostart für Pyplanet nicht hin. Mein Server-Start funktioniert wunderbar, allerdings bekomme ich es, nachdem ich die *.service-Datei für den Server mit root geöffnet habe, nun nicht mal mehr hin, Pyplanet manuell zu starten. Hilfe! 😀

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.