#!/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)在执行时会将某些内容写入我的主目录。因此,如果一个工作一次运行或等到下一个工作完成写东西到家,那么它很好。但是,由于我希望一次运行> 1000个作业,其中1000个尝试将相同的内容写入主页,然后导致崩溃。 有没有一种聪明的方法可以在第一份工作已经开始一段时间之后提交第二份工作(让我们说5分钟)? 我已经检查并找到了两个选项:第一次完成时开始第二份工作,或者在特定日期/时间开始。
谢谢
答案 0 :(得分:0)
您可以尝试以下内容:
while [ yes ]
do
./simplex.bin &
sleep 2
done
它在后台无休止地启动./simplex.bin
进程,等待2秒,启动新的./simplex.bin
等。
请注意,您可能还需要nohup
并为./simplex.bin
添加标准输入/输出重定向。根据您的具体要求
答案 1 :(得分:0)
如果您使用的是Torque,则可以设置可同时运行的作业数量限制:
# Only allow 100 jobs to concurrently execute from this job array
qsub myscript.sh -t 0-10000%100
我知道这并不是您正在寻找的内容,但我猜您可以找到一个插槽限制,让它在不崩溃的情况下运行。