我正在尝试远程编译和运行程序。但是,我想在屏幕中执行此操作,并且我想在 ssh 后在另一个节点上使用网格引擎运行此操作。目前我有:
ssh me@server screen -R session 'qlogin; cd path; mvn options program'
这基本上可行,但我收到一条消息,说我必须连接到终端。我读到了这篇文章,并将 -t 选项添加到 ssh 中。这样,我的命令就中断了:似乎我通过 ssh 登录,屏幕启动,然后不知道“mvn”命令并终止我的会话。
我想知道为什么会发生这种情况,以及如何在使用网格引擎时从本地计算机、屏幕内、远程节点上正确启动作业。
答案1
我会-L
向屏幕添加选项,以打开屏幕日志(默认为文件名screenlog.0
)。然后你也许就能看到发生了什么。我想屏幕将整个视为qlogin; cd path; mvn options program
一个要执行的程序(而不是一组不同的命令),无法执行该程序然后退出。
另一种选择是将正在执行的命令放入脚本中:
#!/bin/sh
qlogin
cd path
mvn options program
创建一个 screenrc 文件(假设我们称之为 mysessionrc):
# myscreenrc
#Create window 0 with title 'mvn' and run /path/to/myscript.sh
screen -t mvn 0 /path/to/myscript.sh
然后运行ssh -t me@server 'screen -R session -c mysessionrc
' 代替。我必须这样做才能使屏幕在 FreeBSD+ssh+screen 组合上工作。
如果仍然失败,那么我会添加:
zombie kr
verbose on
k
到 mysessionrc 文件的开头,以使屏幕提示在完成终止或重新启动后如何处理正在运行的命令r
,并且 verbose 将输出有关屏幕正在执行的操作的一些信息。
答案2
我的猜测是,当通过 SSH 远程执行命令时,您不会生成 Screen 可以附加的终端 (pty)。