-X를 통해 전달된 명령에 대해 화면이 아무 작업도 수행하지 않는 것처럼 보이는 이유는 무엇입니까?

-X를 통해 전달된 명령에 대해 화면이 아무 작업도 수행하지 않는 것처럼 보이는 이유는 무엇입니까?

내 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 문을 사용하는 것보다 쉽습니다.와그의 대답.

관련 정보