원격 호스트의 화면 분할

원격 호스트의 화면 분할

SSH를 통해 원격 스크립트를 실행하는 로컬 스크립트가 있습니다. 로컬 스크립트는minecraft.php입니다.

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i {$this->pemkey} {$this->ssh_user} sudo /vol/start_bukkit.sh

원격 스크립트는 /vol/start_bukkit.sh입니다.

#!/bin/bash
cd "/vol/bukkit"
/usr/bin/screen -S bukkit -m -d /usr/local/bin/java -Xnoclassgc -Xms1024M -Xmx1024M -jar /vol/bukkit/craftbukkit.jar nogui

java 명령이 작동하여 craftbukkit.jar을 실행하지만 화면에서 새 창이 실행되지 않습니다. 어떻게 되어가나요? 새 창을 만드는 방법은 무엇입니까?

원격 서버에 로그인하고 start_bukkit.sh를 실행하면 화면이 예상대로 작동하고 craftbukkit.jar을 실행할 새 분리된 창이 생성됩니다.

편집하다:

나는 그것을 작동시켰다. sudo를 제거하고 screen 명령을 입력하여 로컬 스크립트를 업데이트했습니다. 다음과 같이:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i {$this->pemkey} {$this->ssh_user} /usr/bin/screen -S bukkit -m -d /vol/start_bukkit.sh

원격 측에서는 화면 명령을 제거했습니다.

#!/bin/bash
cd "/vol/bukkit"
/usr/local/bin/java -Xnoclassgc -Xms1024M -Xmx1024M -jar /vol/bukkit/craftbukkit.jar nogui

이것이 왜 작동하는지 설명할 수 없습니다.

답변1

명령을 사용하여 psuedo-tty를 강제 실행해 보십시오 ssh.

ssh -t -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i
{$this->pemkey} {$this->ssh_user} sudo /vol/start_bukkit.sh


man 1 ssh

     -t      Force pseudo-tty allocation.  This can be used to execute
             arbitrary screen-based programs on a remote machine, which 
             can be very useful, e.g. when implementing menu services.  
             Multiple -t options force tty allocation, even if ssh has 
             no local tty.

또한 스크립트에서 start_bukkit.shPATH를 설정하지 않습니다. 호출 시 절대 경로를 사용하지 않았기 java때문에 찾지 못할 수도 있습니다. 스크립트 시작 부분에 PATH를 설정하거나(모범 사례) java절대 경로( /usr/bin/java)를 통해 호출하세요.

관련 정보