4

我正在尝试执行以下操作。现在,我通过 ssh 连接到远程机器并使用 nohup 命令运行我的分析

nohup matlab -nodesktop -nodisplay < mycode.m > output.txt 2>&1 &

现在我想编写一个脚本,在后台运行几个 nohup 命令一个接一个。我设法做到了

#!/bin/bash
matlab -nodesktop -nodisplay -r "mycode;quit;" > output.txt

但不仅代码只在一个 CPU 上工作,而且它进入一个无限循环并且永远不会完成工作。

我能解决吗?重要的是我可以在启动 script.sh 后关闭终端

编辑:多亏了你,我设法做到了,并让以下事情顺利进行

ssh user@ipaddress
screen
cd folder1/
nohup matlab -nodesktop -nodisplay < mycode.m > output.txt 2>&1 &
exit
screen
cd folder2/
nohup matlab -nodesktop -nodisplay < mycode.m > output.txt 2>&1 &
exit

现在可以做一个脚本吗?因为我注意到任何时候我输入screen我都必须在之后按 Enter。

EDIT2:@Peter 我按照你的建议做了

#!/bin/bash
cd folder1/
matlab -nodesktop -nodisplay -r "mycode;quit;" < /dev/null  > output.txt
cd folder2/
matlab -nodesktop -nodisplay -r "mycode;quit;" < /dev/null  > output.txt

但是只有第一个matlab运行,怎么可能呢?

4

2 回答 2

4

编译所有建议和想法,您可以尝试以下方法:

#!/bin/bash
ssh user@ipaddress "
cd folder1/
nohup matlab -nodesktop -nodisplay < mycode.m > output.txt 2>&1 &
cd folder2/
nohup matlab -nodesktop -nodisplay < mycode.m > output.txt 2>&1 &
"

或者

#!/bin/bash
ssh user@ipaddress "
cd folder1/
nohup matlab -nodesktop -nodisplay -r 'mycode;quit;' < /dev/null  > output.txt 2>&1 &
cd folder2/
nohup matlab -nodesktop -nodisplay -r 'mycode;quit;' < /dev/null  > output.txt 2>&1 &
"

或者

#!/bin/bash
ssh user@ipaddress "
cd folder1/
screen -dm matlab -nodesktop -nodisplay < mycode.m > output.txt 2>&1
cd folder2/
screen -dm matlab -nodesktop -nodisplay < mycode.m > output.txt 2>&1
"

或者

#!/bin/bash
ssh user@ipaddress "
cd folder1/
screen -dm matlab -nodesktop -nodisplay -r 'mycode;quit;' < /dev/null  > output.txt 2>&1
cd folder2/
screen -dm matlab -nodesktop -nodisplay -r 'mycode;quit;' < /dev/null  > output.txt 2>&1
"

您也可以尝试expect控制 matlab 而不是发送mycode.m或使用-r它。

试着nohup继续做screen。而且我认为您不再需要添加&它,因为screen默认情况下已经作为守护程序运行。

于 2013-08-29T14:06:14.797 回答
1

谢谢大家帮助我。我想我已经找到了我正在寻找的东西。

  1. ssh进入我的机器
  2. 使用命令创建一个新屏幕screen -dmS analysis
  3. 运行脚本(见下文)nohup ./script.sh &
  4. 关闭屏幕exit
  5. 检查运行情况top(像往常一样:))

这是我的script.sh

#!/bin/bash
matlab -nodesktop -nodisplay -r "cd folder1/; run('mycode.m'); quit"  < /dev/null  > output.txt
matlab -nodesktop -nodisplay -r "cd folder2/; run('mycode.m'); quit"  < /dev/null  > output.txt

分析一个接一个!伟大的!

于 2013-08-29T14:19:19.317 回答