내 Minecraft 서버에 대한 자동 백업 시스템을 설정하려고 했지만 screen을 사용하는 데 문제가 있습니다. 특히 "screen -r sessionname -X "/var/minecraft/somebatchfile""을 사용할 때 아무 일도 일어나지 않습니다.
내 현재 프로세스는 다음과 같습니다.
screen -m -d -S minecraft /var/minecraft/bin/server_nogui.sh
그러면 아무 문제 없이 Minecraft 서버가 시작됩니다. 그러나 문제는 이와 같은 간단한 후속 작업도 실패한다는 것입니다.
screen -r minecraft -X "stop"
오류나 성공 메시지가 표시되지 않으며 서버는 실제로 클라이언트 연결을 끊고 종료하지 않습니다. 내가 뭔가 잘못하고 있는 것 같은데, 뭔지 모르겠어요. 내가 명백한 실수를 했나요? 매뉴얼 페이지를 조금 읽었지만 스스로 알아낼 수 없었습니다.
답변1
-X
인수에 명령 을 주어야 합니다 . 내 생각에는 Minecraft-server 명령을 세션 screen
에 "채우고" 싶은 것 같습니다 .screen
screen -r minecraft -p 0 -X stuff "stop $(printf '\r')"
캐리지 리턴 문자가 전송되므로 printf
"stop" 명령이 실행됩니다. -p 0
캐릭터가 맞는지 확인하세요보내다스플래시 화면 창으로 이동합니다.
이를 보내려면 ssh
명령을 래핑해야 합니다 " "
( 를 사용할 수도 있지만 ` `
명령 대체를 수행할 수는 없습니다).
ssh -t -i ~/.ssh/id_dsa server_user@server_address "screen -r minecraft -X stuff "even other_server_name is getting in on the action\! $(echo -ne '\r')""
이는 !
예약어이므로 이스케이프해야 합니다.
도가능한사용자가 생성한 줄바꿈을 명령에 포함하여 실행합니다.
ssh -t -i ~/.ssh/id_dsa server_user@server_address "screen -r minecraft -X stuff 'even other_server_name is getting in on the action!
'"
!
여기서 탈출할 필요는 없습니다.
답변2
우리가 찾은대로이 비슷한 질문, 연결되지 않은 세션에 키를 보내는 데 화면에 문제가 있습니다. 연결한 경우 기본 창은 0으로 설정됩니다. 그렇지 않으면 키 입력이 창에 들어가지 않기 때문에 자동으로 실패합니다. 당신은 이것을 피할 수 있습니다-p 0
매개변수 를 추가하여화면 명령에.
또는 더 나은 행동을 사용할 수 있습니다tmux
이와 같이:
tmux new-session -d -n minecraft /var/minecraft/bin/server_nogui.sh
그런 다음 다음과 같이 Minecraft 서버에 중지 명령을 보냅니다.
tmux send-keys -t minecraft "stop^M"
위의 ^M 시퀀스는 실제 입력을 시각적으로 표현한 것입니다. Ctrl+ 를 누르는 것과 같은 명령으로 생성할 수 있습니다 v Enter. 이것은 캐리지 리턴을 보내기 위해 echo 문을 사용하는 것보다 쉽습니다.와그의 대답.