#!/bin/bash
#PBS -S /bin/bash
#PBS -N garunsmodel
#PBS -l mem=2g
#PBS -l walltime=1:00:00
#PBS -t 1-2
#PBS -e error/error.txt
#PBS -o error/output.txt
#PBS -A improveherds_my
#PBS -m ae
set -x
c=$PBS_ARRAYID
nodeDir=`mktemp -d /tmp/phuong.XXXXX`
cp -r /group/dairy/phuongho/garuns $nodeDir
cp /group/dairy/phuongho/jo/parity1/my/simplex.bin $nodeDir/garuns/simplex.bin
cp /group/dairy/phuongho/jo/parity1/nttp.txt $nodeDir/garuns/my.txt
cp /group/dairy/phuongho/jo/parity1/delay_input.txt $nodeDir/garuns/delay_input.txt
cd $nodeDir/garuns
module load gcc vle
XXX=`pwd`
sed -i "s|/group/dairy/phuongho/garuns/out|$XXX/out/|" exp/garuns.vpz
awk -v i="$c" 'NR == 1 || $8==i' my.txt > simplex-observed.txt
awk -v i="$c" 'NR == 1 || $7==i {print $6}' delay_input.txt > afm_param.txt
cp "/group/dairy/phuongho/garuns_param.txt" "$nodeDir/garuns/garuns_param.txt"
while true
do
./simplex.bin &
sleep 5m
done
awk 'NR >1' < simplex-optimum-output.csv>> /group/dairy/phuongho/jo/parity1/my/finalresuls${c}.csv
cp simplex-all-output.csv "/group/dairy/phuongho/jo/parity1/my/simplex-all-output${c}.csv"
#awk '$28==1{print $1, $12,$26,$28,c}' c=$c out/exp_tempfile.csv > /group/dairy/phuongho/jo/parity1/my/simulated_my${c}.csv
cp /out/exp_tempfile.csv /group/dairy/phuongho/jo/parity1/my/exp_tempfile${c}.csv
rm simplex-observed.txt
rm garuns_param.txt我有上面的bash脚本,允许通过PBS_ARRAYID同时提交多个作业。我的问题是,我的模型(simplex.bin)在执行时会向我的主目录写入一些内容。因此,如果一个作业一次运行,或者等到下一个作业完成向home写入内容,那么这是很好的。然而,由于我希望同时运行1000个以上的作业,其中1000个作业试图将相同的内容写入home,然后导致崩溃。有没有一种聪明的方法,在第一个作业已经启动了一段时间(比如5分钟)之后,就提交第二个作业?我已经检查并发现了两个选项:当第一个作业完成时开始第二个作业,或者在特定的日期/时间开始。
谢谢
发布于 2016-07-05 14:15:00
您可以尝试执行以下操作:
while [ yes ]
do
./simplex.bin &
sleep 2
done它无休止地在后台启动./simplex.bin进程,等待2秒,启动一个新的./simplex.bin,等等。
请注意,您可能还需要nohup,并为您的./simplex.bin添加标准输入/输出重定向。取决于您的确切要求
发布于 2016-07-08 06:52:04
如果您使用的是Torque,则可以对可以并发运行的作业数量设置限制:
# Only allow 100 jobs to concurrently execute from this job array
qsub myscript.sh -t 0-10000%100我知道这不是你想要的,但我猜你可以找到一个插槽限制,让它运行而不会崩溃。
https://stackoverflow.com/questions/38196149
复制相似问题