远程主机上的分离屏幕

远程主机上的分离屏幕

我有一个通过 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,但 screen 没有启动新窗口。这是怎么回事?如何创建一个新窗口?

如果我登录到远程服务器并运行 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) 调用。

相关内容