运行 windows wine下的程序使用gnu parallel

run windows program under wine using gnu parallel

我有一个非常基本的脚本,可以在 Wine 下 运行 多个 windows 种群遗传学程序 (msvar.exe) 的副本。它使用 "find" 在多个文件夹中查找启动文件 (INTFILE),然后使用该启动文件在每个目录中启动 msvar.exe 的实例。不同的文件夹在启动文件中会有不同的参数,所以我可以通过添加“&”参数来运行一系列的模拟。在这里;

for i in $(find /home/msvartest -name INTFILE -type f)
do (
cd $(dirname $(realpath $i));
#   wine explorer /desktop=name msvar.exe;
wineconsole --backend=user msvar.exe;
) &
done

目前,我在我的双六核机器上的自己的 wineconsole(或 wine explorer window)下一次 运行 多达 20 个 msvar.exe 副本。每个 运行 个实例可能需要 3 或 4 天,但程序在单个内核上只有 运行s,所以我需要 运行 并行模拟。看起来 Gnu parallel 是 运行 msvar.exe 的更好方法,并且可以让我 运行 在远程计算机上进行更多模拟。按照 中的建议,我尝试让 Gnu 与 wineconsole 并行工作,但没有成功。有没有人能提供帮助,或者更好地编写一个我可以使用的脚本。

感谢您的帮助。

我认为你的命令会变得非常冗长和笨拙,除非你使用像这样的导出函数:

#!/bin/bash

doit() {
   ...
   ...
}

export -f doit
parallel -j 10 doit ::: {0..99}

因此,对于您的示例,它看起来像(未经测试):

#!/bin/bash

doit() {
   echo Processing 
   cd $(dirname $(realpath ""));
   WINEPREFIX=$HOME/slot{%} wineconsole --backend=user msvar.exe
}
export -f doit

find /home/msvartest -name INTFILE -type f | parallel --dry-run doit

不幸的是,我没有设置您的环境来测试它,但如果有小错误,它应该很接近并且很容易更正。尝试看看它做了什么,然后删除 --dry-run 让它真正做一些事情。

如果文件名中有空格,则应将 -print0find 命令一起使用,并在 parallel 之后添加 -0 但这只会使事情复杂化时刻.

#!/bin/bash

doit() {
   echo Processing 
   cd $(dirname $(realpath ""));
   WINEPREFIX=$HOME/slot wineconsole --backend=user msvar.exe
}
export -f doit

find /home/msvartest -name INTFILE -type f | parallel doit {} {%}