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-Key: 4934292560

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

Printed on: April 26, 2024 at 15:04 o'clock

Member: Lochkartenstanzer
Lochkartenstanzer Dec 12, 2022 updated at 08:24:39 (UTC)
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
Member: ExplosionTopic
ExplosionTopic Dec 12, 2022 at 11:12:30 (UTC)
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
Member: HanTrio
Solution HanTrio Dec 12, 2022 at 14:20:05 (UTC)
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".
Member: ExplosionTopic
ExplosionTopic Dec 12, 2022 at 15:32:44 (UTC)
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