ssh + screen:如何操作?

ssh + screen:如何操作?

我正在尝试通过 ssh 启动一个软件:

我可以 :

ssh -t [email protected] 
screen -S datanode -d -m ~/hadoop/bin/hdfs datanode

ssh -t [email protected] screen -S datanode -d -m ~/hadoop/bin/hdfs datanode

不起作用

我尝试了几个带引号的选项:

ssh -t [email protected] screen '-S datanode -d -m ~/hadoop/bin/hdfs datanode'

或者

ssh -t [email protected] screen -S datanode -d -m '~/hadoop/bin/hdfs datanode'

或者

ssh -t [email protected] screen ' -S datanode -d -m ~/hadoop/bin/hdfs datanode'

但我找不到正确的:-(

答案1

最好将选项分组在一起

ssh -t username@host "screen -dmS 'NAMEofSCREEN' command"

然后你可以重新连接

screen -r NAMEofSCREEN

请记住,如果command退出,这将不是一个可重新连接的屏幕。例如:

ssh -t username@host "screen -dmS 'NAMEofSCREEN' echo | wall"

将会给您wall消息...

Broadcast message from user@host (pts/15) (Tue Jan 16 12:04:07 2018):

..但命令运行成功后屏幕将立即关闭

答案2

我发现你的咒语有两个(潜在的)问题

ssh -t remote screen -S datanode -d -m ~/hadoop/bin/hdfs datanode
  1. 客户/本地shell(执行 的那个ssh)会扩展~并替换 的值$HOME,该值可能与远程服务器的值不同。建议您使用相对路径(例如./hadoop/bin/hdfs)或完全限定路径,或者用单引号引用远程命令(例如 '~/hadoop/bin/hdfs datanode')以防止在客户端扩展。
  2. 因为该screen命令正在启动一个分离的实例,但仍然是 ssh 启动的 shell 的子进程,所以当远程 shell 退出时它会终止。

此外,由于屏幕创建了自己的 tty,因此您不需要-t选项ssh

尝试使用在命令执行之前-f告诉ssh进入后台。即:

ssh -f remote screen -S datanode -d -m ./hadoop/bin/hdfs datanode

同样有效的替代方案nohup

ssh remote nohup screen -S datanode -d -m ./hadoop/bin/hdfs datanode

相关内容