Ich habe versucht, ein automatisiertes Sicherungssystem für einen Minecraft-Server einzurichten, und ich habe Probleme mit dem Bildschirm, insbesondere wenn ich 'screen -r sessionname -X "/var/minecraft/somebatchfile"" verwende, passiert nichts.
Mein Prozessablauf sieht im Moment ungefähr so aus:
screen -m -d -S minecraft /var/minecraft/bin/server_nogui.sh
Dies startet den Minecraft-Server ohne Probleme. Das Problem ist jedoch, dass selbst einfache Folgemaßnahmen wie diese fehlschlagen:
screen -r minecraft -X "stop"
Ich erhalte keine Fehlermeldung oder Erfolgsmeldung, und der Server trennt die Clients nicht wirklich und fährt nicht herunter, wie er sollte. Ich vermute, dass ich etwas falsch mache, aber ich weiß nicht was. Gibt es einen offensichtlichen Fehler, den ich mache? Ich habe die Manpage ein wenig gelesen, aber ich habe kein Glück, es selbst herauszufinden.
Akzeptierte Antwort:
Sie müssen den Parameter -X
angeben ein screen
Befehl, ich denke, Sie möchten einen Minecraft-Server-Befehl in den screen
„stopfen“. Sitzung.
screen -r minecraft -p 0 -X stuff "stop $(printf 'r')"
Der printf
einen Wagenrücklauf senden, damit der Befehl „Stopp“ ausgeführt wird. -p 0
stellt sicher, dass die Zeichen an das anfängliche Bildschirmfenster gesendet werden.
Zum Senden über ssh
Sie müssen den Befehl in " "
einschließen (Sie könnten auch ` `
verwenden , aber das würde Ihnen die Befehlsersetzung nicht erlauben).
ssh -t -i ~/.ssh/id_dsa [email protected]_address "screen -r minecraft -X stuff "even other_server_name is getting in on the action! $(echo -ne 'r')""
Achtung !
ein reserviertes Wort ist, müssen Sie es maskieren.
Es ist auch möglich, einen vom Benutzer generierten Zeilenumbruch in den Befehl einzufügen, um ihn auszuführen:
ssh -t -i ~/.ssh/id_dsa [email protected]_address "screen -r minecraft -X stuff 'even other_server_name is getting in on the action!
'"
Escaping !
ist hier nicht notwendig.