如何使用SSH在后台运行一个命令,离开会话(how to run a command in back

2019-09-01 09:09发布

我目前正试图ssh到远程计算机并运行一个脚本,然后离开的脚本运行的节点。 下面是我的脚本。 然而,在运行时,该脚本成功的机器,但SSH会话挂起运行。 有什么问题?

ssh -x $username@$node 'rm -rf statuslist
                        mkdir statuslist
                        chmod u+x ~/monitor/concat.sh
                        chmod u+x ~/monitor/script.sh
                        nohup ./monitor/concat.sh &
                        exit;'

Answer 1:

还有,当你想执行/启动远程计算机/服务器上的某些脚本(这将自动终止),并从服务器断开连接的一些情况。

例如:在机器上运行一个脚本,执行时

  1. 采用模型并将其复制到远程服务器
  2. 对于与模型运行仿真创建一个脚本,并将其推送到服务器
  3. 启动脚本的服务器和断开的
  4. 从而开始了剧本的职责是在运行服务器仿真和一旦完成(需要数天才能完成)的结果复制回客户端。

我会用下面的命令:

ssh remoteserver 'nohup /path/to/script `</dev/null` >nohup.out 2>&1 &'

@CKeven,你可以把所有这些命令在一个脚本,将其推到远程服务器,并启动它,如下所示:

echo '#!/bin/bash  
rm -rf statuslist  
mkdir statuslist  
chmod u+x ~/monitor/concat.sh  
chmod u+x ~/monitor/script.sh  
nohup ./monitor/concat.sh &  
' > script.sh

chmod u+x script.sh

rsync -azvp script.sh remotehost:/tmp

ssh remotehost '/tmp/script.sh `</dev/null` >nohup.out 2>&1 &'

希望这个作品;-)

编辑:您还可以使用SSH用户@主机“界面-S SESSIONNAME -d -m‘/路径/到/可执行文件’”

这将创建一个分离屏幕会话并在其运行目标命令



Answer 2:

你认为使用哪种screen为这个? 你可以运行screen通过ssh来启动命令( concat.sh ),然后你可以返回到屏幕会话,如果你要监视它(可能是得心应手,这取决于做什么CONCAT)。

更具体地讲,试试这个:

ssh -t $username@$node screen -dm -S testing ./monitor/concat.sh

你会发现,提示立即返回,并concat.sh在远程机器上运行。 我要解释一些选项:

  • ssh -t使一个TTY。 屏幕需要这个。
  • screen -dm使得它在“分离”模式启动。 这就像“背景”你的目的。
  • -S测试给你的屏幕会话的名称。 它是可选的,但建议。

现在,一旦你这样做,你可以去到远程计算机并运行此:

screen -r testing

这将附上你包含你的程序的屏幕会话。 从那里,你可以控制它,杀死它,看到它的输出,等等。 按Ctrl-A,然后将d卸下你的屏幕会话。 screen -ls会列出所有正在运行的会话。



Answer 3:

这可能是标准输入流。 尝试ssh -n ...ssh -f ...



Answer 4:

对我来说,只有这个工作:

screen -dmS name sh my-script.sh

这当然取决于屏幕,并让您稍后再连接,如果你想标准输入和标准输出。 my-script.sh结束时,屏幕上会自行终止。



Answer 5:

下面是一些需要努力寻找一个更常见的决策,它确实为我工作:

#!/usr/bin/bash
theScreenSessionName="test"
theTabNumber="1"
theStuff="date; hostname; cd /usr/local; pwd; /usr/local/bin/top"

echo "this is a test"

ssh -f user@server "/usr/local/bin/screen -x $theScreenSessionName -p $theTabNumber -X stuff \" 
$theStuff
\""

它发出代表“用户”的标签在“服务器”初步建立的屏幕会话$ theScreenSessionName没有$ theTabNumber命令$ theStuff名单。

请注意后-X东西\”发送到克服‘东西’选项的毛刺尾随空白的。在接下来的行中的空白和$ theStuff被‘确认’追加(^ M)键。千万不要错过“EM!

的“这是一个测试”消息中的初始终端是呼应,和$ theStuff命令在屏幕提到/选项卡内确实执行。



文章来源: how to run a command in background using ssh and detach the session
标签: shell ssh nohup