screen in einem Shellscript

  • Guten Tag die Herrn und Damen,
    ich versuche schon seit ein paar Tagen einen screen befehl in ein Shellscript zu packen, um meine OpenTTD 1.6.1 serverkonsole auch noch im nachhinein öffnen zu können. Ich bin jetzt auch schon soweit gekommen:

    Bash
    #!/bin/bash
    wait
    echo "Beginne mit dem Serverstart"
    sleep 1
    screen -d -m -S openttd_server -c "/home/pi/openttd-init/openttd"

    Nun wen ich die ausführe startet eine neue Screen Sitzung, nur dann kommt sowas hier:


    Der untere Teil ist wohl uninteressant aber sonst habe ich, als absoluter Linux Bob keine Ahnung wo, und welches, config file gemeint ist. OpenTTD 1.6.1 läuft wenn ich es Manuel (openttd -D) als Server starte ohne Probleme, nur wie ich die newgrf einbinde hab ich noch nicht so ganz kapiert.


    System:
    Raspberry Pi Zero
    Raspbian Jessie


    Ich hoffe soweit das sind genug Infos und vielen dank im voraus.

  • Code
    screen -d -m -S openttd_server -c "/home/pi/openttd-init/openttd"

    ??
    Was genau soll die -c Option deiner Meinung nach machen?

    Die -c Option ist der Pfad zum Konfigurationsfile...

    Ein screen -h listet alle Optionen auf...

    Mehr hier
    Automatisch zusammengefügt:
    Nachtrag:

    Code
    screen -d -m -S openttd_server -X "/home/pi/openttd-init/openttd"

    könnte das sein, was du willst...

  • Moin DerAnanasKönig,

    erstmal: Herzlich Willkommen im Forum!

    Was mich mal interessieren würde...

    Code
    openttd_server -c "/home/pi/openttd-init/openttd"

    Dieser Befehl geht??

    Weil screen ist für sich nur ein Terminal. Aber wenn der Befehl nix taugt, dann....

    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.


  • Was mich mal interessieren würde...

    Code
    openttd_server -c "/home/pi/openttd-init/openttd"


    Dieser Befehl geht??
    Weil screen ist für sich nur ein Terminal. Aber wenn der Befehl nix taugt, dann....

    Der Befehl, so wie du ihn aufgeschrieben (verkürzt/zerissen) hast, geht nicht...

    Der screen-Befehl definiert mit der -S Option den Socketnamen, die -c Option definiert das alternative Config-File für screen:

    Code
    -c file       Read configuration file instead of '.screenrc'.

    Erst die Option -X definiert das Kommando, welches sofort nach dem öffnen des screen-Sockets sofort dort drin ausgeführt wird:

    Code
    -X            Execute <cmd> as a screen command in the specified session.

    Somit gilt der screen-Befehl so, wie ich ihn in meinem obigen Beispiel geschrieben habe:
    Initialisieren eines Sockets, betreten und das Kommand [font="monospace"]/home/pi/openttd-init/openttd [/font] ausführen...

  • Moin,
    Zentris
    Du hast recht! habe mir mal in Ruhe die manpage von screen angesehen.

    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Also gut die Herren,
    ich werde nun meine Absichten mit dem sagenumwobenen c- offen legen.
    Ich kann nur sagen das es mir durchaus peinlich ist aber, nun ja:

    Ich habe gesucht, irgendetwas irgendwo gefunden, copy paste, und dann nach der Fehlermeldung in "man screen" gesucht und verzweifelt.
    Ich bin zwar so txt ähnliche listen aus ms-DOS (ist so ein hobby von mir uralte Betriebssysteme auszuprobieren) gewohnt, aber dass die teile zu Anfang für neulinge so unübersichtlich sind hätte ich nicht gedacht. Gut es ist nur eine einfache, strukturierte liste, aber das wahr das erste mal.

    Nun wenn ich aber das vom Zentris bereitgestelte

    Code
    screen -d -m -S openttd_server -X "/home/pi/openttd-init/openttd"


    eingebe kommt

    Code
    No screen session found.

    Könnte man mir dann dieses ominöse c- erklären. Ein paar kästen weiter oben wurd das mal angeschnitten ( was taugt das alternative config file?).

    Danke für die antworten.

  • man screen bzw screen -h gibt dir ausführlichst Auskunft (ein bisschen Eigeninitiative darf es von deiner Seite schon sein...) :D

    Schau dir das Kommando an, lies die Hilfeseiten und analysiere, woran es liegt

    (btw: ich hatte die Optionen so von dir übernommen, ohne diese echt zu testen, nun hab ich das Kommando getestet und ja: es ist ein Fehler drin...)

  • Also gut.....
    Erstmal guten Morgen/Mittag,
    ich habe nun ein bisschen herumexperimentiert und bin zu dem Schluss gekommen das es wohl an dem -X liegt (und an einem Fehler meinerseits).
    Ich glaube das dieses nur bei bereits bestehenden Sitzungen verwendet werden kann. Wenn ich direkt beim start etwas ausführen will (also in einem einzigen befehl) muss man das -X weglassen.
    Wie z.B.:

    Code
    screen -S test /home/pi/testdatei


    Bitte korrigieren wenn falsch .

    Erschwerend kam da noch hinzu das das besagte openttd script gar nicht so verwendet werden kann. Ich kann es nur wenn ich in seinem Verzeichnis bin mit

    Code
    openttd


    ausführen, sonst muss ich da noch 'start' dranhängen. Also noch einen Parameter, sonst kommt immer eine "Datei ist nicht da" Fehlermeldung.

    Ich habe es jetzt so gelöst. Als ich ein bisschen in den Ordnern herumgewühlt habe, habe ich eine config Datei enteckt, die im gleichen Verzeichnis wie das openttd skript ist. Geöffnet und siehe da in Zeile 17/18 steht ja etwas interessantes.

    Code
    # Name to use for the screen instance
    SCREEN="openttd_server"


    Nun wenn ich jetzt

    Code
    /home/pi/openttd-init/openttd start


    eingebe startet es den Server UND Screen zeitgleich. Sehr komfortabel, ja ja wirklich gut.

    Ich könnte allerdings auch

    Code
    screen -S test /home/pi/openttd-init/openttd start


    verwenden, währe dann allerdings doppelt gemoppelt, und dann "terminated" sich auch noch die screen test Sitzung.
    Also: "screen -S test /home/pi/openttd-init/openttd start"-> startet openttd mit start-> dies startet dann screen-> und jetzt beendet es die test screen sitzung weil es keine 2 openttd Server Prozesse gleichzeitig geben darf (oder so). Irgendwie lustig.

    Also dann, vielen dank an alle beteiligten für die Hilfe.
    Und wer das spiel mal ausprobieren will kann ja mal unter Windows hier schauen, und wer unter Linux die neuste (1.6.1) version haben will kann diese Anleitung nehmen. Ausprobieren kostet nichts.

  • Moin DerAnanasKönig,

    sehr schön.
    Dann nur noch dein Thema als "erledigt" markieren.

    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!