Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 使用gnu并行在远程服务器上运行wine中的windows程序_Parallel Processing_Gnu_Bioinformatics_Wine_Gnu Parallel - Fatal编程技术网

Parallel processing 使用gnu并行在远程服务器上运行wine中的windows程序

Parallel processing 使用gnu并行在远程服务器上运行wine中的windows程序,parallel-processing,gnu,bioinformatics,wine,gnu-parallel,Parallel Processing,Gnu,Bioinformatics,Wine,Gnu Parallel,我有一个由Mark Setchell(以及Ole Tange)提供的工作脚本,它允许我使用“并行”在wine下运行windows程序“msvar.exe”的多个实例。我目前在一台双六核计算机上运行多达20个实例。这是脚本(这一个用于Centos 6.8,它没有realpath命令) 我还有其他几个双六核服务器,希望使用“并行”在这些其他服务器上运行更多的“msvar.exe”实例。我已经阅读了“并行”文档,但是对于如何将远程服务器合并到这个脚本中感到困惑。根据帮助文件中的一个示例,我尝试通过在脚

我有一个由Mark Setchell(以及Ole Tange)提供的工作脚本,它允许我使用“并行”在wine下运行windows程序“msvar.exe”的多个实例。我目前在一台双六核计算机上运行多达20个实例。这是脚本(这一个用于Centos 6.8,它没有realpath命令)


我还有其他几个双六核服务器,希望使用“并行”在这些其他服务器上运行更多的“msvar.exe”实例。我已经阅读了“并行”文档,但是对于如何将远程服务器合并到这个脚本中感到困惑。根据帮助文件中的一个示例,我尝试通过在脚本中的“parallel”和“doit”命令之间添加“-S server IP address”来添加服务器,但这只是导致了一个错误,即“doit”不是命令,正如您所期望的那样。如何修改此脚本以将远程服务器合并到“parallel”使用的cpu池中,以便运行更多的“msvar.exe”实例?

由于这行代码,您的脚本无法正常工作:

   WINEPREFIX=$HOME/slot{%} wine /home/msvar/msvar0.4.1b/msvar.exe
GNU Parallel不会在函数中替换{%},而只是在命令行上的命令中替换,因此我认为您的WINEPREFIX设置为您不期望的值

这将为1 2 3 4提供最新版本的GNU并行:

parallel -S 4/: echo {%} ::: a b c d
要远程运行作业,需要ssh才能工作。因此,这必须起作用:

parallel -S server1 echo ::: foo bar
您还需要将函数导出到服务器。因此,您需要一个最新版本的GNU Parallel:

myfunc() { echo OK "$@"; }
export -f myfunc
parallel -S server1 --env myfunc myfunc ::: this works
myfunc() { echo OK "$@"; echo in myfunc >> "$1".result; }
export -f myfunc
echo foofile > foo.txt
echo barfile > bar.txt
parallel --trc {.}.result -S server1 --env myfunc myfunc {.} ::: foo.txt bar.txt
cat foo.result bar.result
您还需要传输文件,因此必须在两端安装
rsync
,这样可以:

myfunc() { echo OK "$@"; }
export -f myfunc
parallel -S server1 --env myfunc myfunc ::: this works
myfunc() { echo OK "$@"; echo in myfunc >> "$1".result; }
export -f myfunc
echo foofile > foo.txt
echo barfile > bar.txt
parallel --trc {.}.result -S server1 --env myfunc myfunc {.} ::: foo.txt bar.txt
cat foo.result bar.result
您的
find
命令提供了文件的绝对路径,但我们需要将其传输到与远程工作站上的workdir相对的位置。方法是在路径中插入/:

/foo/bar/quux/./baz
将读取
/foo/bar/qux/baz
,但将其复制到
workdir/baz
。这将在正确的位置插入/:

--transferfile '{= s:(.*)/:$1/./: =}'
不清楚是否有结果文件。如果没有,可以使用
--transfer--cleanup
而不是
--trc{/}.result
。还不清楚您是否只需要INTFILE作为输入,或者
msvar.exe
是否使用目录中的其他文件。下面假设您只需要它。否则,您需要添加
--basefile otherfile
--transferfile{=s:(.*)/:$1/:=}.other

结合所有这些(未经测试):

仅适用于本地:

find /home/msvar/MSVAR_ORC_NEWUPLOAD -name INTFILE -type f | parallel doit {} {//} {%}
当上述操作起作用时,这应适用于远程:

find /home/msvar/MSVAR_ORC_NEWUPLOAD -name INTFILE -type f | 
  parallel --wd ... --tf '{= s:(.*)/:$1/./: =}' --trc '{/.}'.result --env doit -S :,server1,server2.example.com doit {} {//} {%}
  • --wd…=在远程计算机上创建临时workdir
  • --tf'{=s:(.*)/:$1//:=}'=将{}传输到workdir-将其保存为不带dir的名称
  • --trc{/}.result=在传输到workdir之后,运行命令,然后将{/}.result传输回,然后从workdir中删除{}和{/}.result
  • --env doit=传输函数
    doit
    ,以便在远程系统上使用
  • -S:,server1,server2.example.com=使用本地计算机和2台服务器
  • doit=执行doit
  • {}=参数
  • {/}=参数目录
  • {%}=作业槽

我鼓励您在进入相当高级的GNU Parallel使用时阅读。

我认为我们需要将
doit()
放入一个小
bash
脚本中,其他六核可以从您的登录目录或类似目录中读取/执行。数据文件是否在其他服务器上的同一位置可见(即通过共享)?或者GNU Parallel也必须分发数据文件吗?我想使用Parallel来分发、返回和清理(可能是-trc选项),这是Parallel吸引我的地方之一。我们经常使用这个程序,我的最终目标是拥有一个简单的web界面,这样通过并行处理数据就有意义了。我正在并行地尝试--env变量(关于环境的一些东西?),因为它似乎有潜力,但就像以前一样,我很快就达到了我的无能水平,我担心我的大脑会爆炸。这是我第一次在论坛上讨论,所以我不知道是否允许,但我很乐意把它作为一个小合同来做。我添加了GNU并行标记,以便Ole看到这一点。除非他在接下来的几天内没有时间回答,否则我会听从他的意见,因为我不想通过添加我自己的误解来混淆事情。我想Ole可能是你的人-他通常会出色而迅速地回答所有问题。
msvar
阅读哪些文件?它生成什么文件?哪些文件应该复制到远程机器,哪些文件应该复制回来?同样:要给出正确的答案,我们确实需要更多地了解
msvar
。运行
msvar
之前,dir是什么样子的?之后呢?哪些文件可以忽略?什么是。。(家长董事)看起来怎么样?哇-请原谅我的耽搁,我仍然在用我微薄的技能尝试让事情运转起来。我在进步,但很慢。Msvar.exe使用wine在包含3个文件(数据、配置、模型)的目录中运行,它将处理数据并在与数据相同的目录中写入20个结果文件。我可能有超过20个目录,每个目录都有不同的数据集、模型或配置。在我最初的find脚本中,我将cd放入每个目录并运行msvar.exe,使用“&”参数,我可以一次运行约20个副本。可以将文件夹中的一个文件夹并行复制到服务器上,处理并返回文件夹和结果。