원격 호스트의 분리된 화면

원격 호스트의 분리된 화면

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)를 통해 호출하세요.

관련 정보