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.sh
PATH를 설정하지 않습니다. 호출 시 절대 경로를 사용하지 않았기 java
때문에 찾지 못할 수도 있습니다. 스크립트 시작 부분에 PATH를 설정하거나(모범 사례) java
절대 경로( /usr/bin/java
)를 통해 호출하세요.