我正在运行一些非常冗长的模拟(大约几天,并且模拟器本身用于多线程/处理的唯一功能是使用PBS服务器并且有许多单独的节点可以将其放置出来)。
我目前有一个运行32个核心的虚拟机,在Ubuntu上运行约120GB RAM。
每个模拟目前在1个核心上运行,但我有几个文件要同时运行以节省时间(例如几天而不是几个月!) - 即我想在我的VM中运行模拟每个32个左右的核心。
到目前为止,我认为我的脚本没有正确生成多个分叉进程,因为top的输出没有为每个进程显示进程。
我到底哪里错了?
(另外在相关的说明中,对于脚本中的分叉进程(&),是否有必要指定nohup(在模拟命令本身或整个脚本中都有) - 我怀疑我是真的在这里愚蠢,应该真的在管道STDOUT,而只是没有.sh文件吗?
脚本:
#!/bin/bash
#####
pkgdir=~/Applications/itasser/
libdir=$pkgdir/itlib
for folder in `ls $1`;
do
datadir=`find ~/ -type d -name ${folder}`
t_start=$(date +%s.%N)
nohup perl ~/Applications/itasser/I-TASSERmod/runI-TASSER.pl -pkgdir $pkgdir -libdir $libdir -seqname $folder -datadir $datadir -java_home /usr/ &
wait
t_stop=$(date +%s.%N)
dt=$(echo "$t_stop - $t_start" | bc)
echo "itasser simulation for" $folder "took" $dt
done
$1
是我传递给脚本的文件夹(例如~/testfiles/
)。
我还怀疑我在这里为perl脚本计时的努力只有在顺序运行每个文件时才有效,并且不能正确计算每个理想分叉进程的时间 - 但这是一个单独的问题。