explosiontopic
Goto Top

Strg-C an Linux Screen senden

Hallo und Servus an die Community.

Ich habe mal eine kurze Frage:
Ich benutze sehr gerne Linux Screen für Steam dedicated Gameserver, aber habe ein Problem wenn ich diese updaten möchte. Ich habe mir hier auch eine Update Shell geschrieben. Leider steht in dem Script aktuell der Befehl um einen Screen zu killen und dann ein Update des Spiels zu machen, was aber wenig Sinn macht, weil ja dann auch kein sicherer Shutdown des Spieleservers erfolgt. Aktuell läuft auf den Servern soweit ich weiß Ubuntu 18.04 (oder 20.04).

Hier das aktuelle Build (Ist-Zustand):
screen -X -S valheim kill
steamcmd +login anonymous +force_install_dir /home/user/steamserver/valheim +app_update 896660 validate +exit
cd /home/user/start/
./valheimstart.sh

Nun würde ich gerne in die erste Zeile des Update-Shells den Ctrl-C Befehl schreiben, einen Sleep Timer einbauen und nach herunterfahren des Servers das Update starten.

Ungefähr so (Soll-Zustand):
screen -? valheim saveshutdown
sleep 20
steamcmd +login anonymous +force_install_dir /home/user/steamserver/valheim +app_update 896660 validate +exit
cd /home/user/start/
./valheimstart.sh

Hat hier jemand eine Lösung für mich?
Google wollte ich an dieser stelle nutzen, hat aber leider nicht so ganz geholfen.
Ich habe noch gefunden:
screen -S session_name -X
oder
screen -S session_name ^X
Hat aber leider nicht funktioniert.

Vielen Dank an euch und einen schönen 3. Advent
Dennis / Explo

Content-ID: 4934292560

Url: https://administrator.de/contentid/4934292560

Ausgedruckt am: 21.11.2024 um 13:11 Uhr

Lochkartenstanzer
Lochkartenstanzer 12.12.2022 aktualisiert um 09:24:39 Uhr
Goto Top
Moin,

gibt es einen Grund, warum Du kein kill mit SIGINT nutzt, um direkt an den gewünschten Prozess das "ctrl-C" zu schicken?

lks
ExplosionTopic
ExplosionTopic 12.12.2022 um 12:12:30 Uhr
Goto Top
gibt es einen Grund, warum Du kein kill mit SIGINT nutzt, um direkt an den gewünschten Prozess das "ctrl-C" zu schicken?

Wie muss ich mir das vorstellen? Wie würde ein Beispiel Command aussehen in dieser Form?
Also das man den Befehl mit einem session_name-Beispiel demonstrieren kann?

Was ich noch dazu sagen muss:
Es sollte über SSH funktionieren, da ich mich meistens auf den Server per SSH und nicht auf die direkte Oberfläche aufwähle.

Trotzdem vielen vielen Dank schonmal, ich werde mich da noch ein bisschen einlesen müssen.
Gruß Dennis / Explo
HanTrio
Lösung HanTrio 12.12.2022 um 15:20:05 Uhr
Goto Top
Das kill command kann verschiedene Signale senden, wobei -9 (SIGKILL) und -15 (SIGTERM) wohl die verbreitetsten sind.
Eine Übersicht erhältst du mit:
kill -l
Oder zB auch siehe hier: https://www.educba.com/linux-kill-signals/

Da siehst du dann auch "-2" (SIGINT), was quasi gleichbedeutend ist mit "Ctrl + c".

Das kannst du dann verwenden, um ein bestimmtes Programm / Prozess / daemon / whatever mit der dazugehörigen PID (process ID) gezielt zu stoppen, zB:

for valheim_process_id in $(ps aux | grep -i "valheim" | awk '{print $2}'); do  
    kill -2 $valheim_process_id
done

-> Das sucht sich alle Prozesse, die irgendwas mit "valheim" einthalten, gibt dann nur die PID(s) aus und sendet an alle so gefundenen Prozesse eben ein "Ctrl + c".
ExplosionTopic
ExplosionTopic 12.12.2022 um 16:32:44 Uhr
Goto Top
Hallo @HanTrio, habe vielen Dank für diesen Ausführlichen Kommentar.
Werde gleichmal das passende Script zusammen basteln face-smile

Wünsche euch noch einen schönen Abend.
Gruß Dennis / Explo