遠端主機上的分離螢幕

遠端主機上的分離螢幕

我有一個透過 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

在遠端,我刪除了 screen 命令:

#!/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) 呼叫。

相關內容