Por que o batchfile extra, se você usar em paralelo?
parallel -j3 --delay 1 ./sub_script ::: 20141001 20141002 20141003 20141004 20141005
Meus scripts estão tendo problemas para executar corretamente as coisas no GNU paralelo.
Eu tenho um sub_script
como (todas essas versões são simplificadas):
#! /bin/bash
input=$1
# input is a date in YYYYMMDD format
mkdir -p $input
cd $input
filename=$input'.txt'
echo 'line1' > $filename
echo 'The date is: '$input >> $filename
Então eu tenho um arquivo multi.sh assim:
cd /home/me/scripts; ./sub_script 20141001
cd /home/me/scripts; ./sub_script 20141002
cd /home/me/scripts; ./sub_script 20141003
cd /home/me/scripts; ./sub_script 20141004
cd /home/me/scripts; ./sub_script 20141005
Eu estou tentando usar o GNU paralelo para executar todas estas funções com múltiplos núcleos usando este comando
parallel -j 3 --delay 1 < multi.sh
para rodar em 3 núcleos. Tentei implementar um atraso de 1 segundo entre a execução de cada linha para evitar problemas, mas isso não funciona.
Estou tendo problemas com os novos diretórios que contêm arquivos impróprios. Eu acho que isso só acontece quando há mais linhas em multi.sh
do que os núcleos especificados por -j
, e isso só acontece esporadicamente (nem sempre é reproduzível). Posso executar novamente a linha parallel
2 vezes seguidas e obter resultados diferentes. Às vezes, posso obter 20141002.txt
arquivos no diretório 20141005
, em vez dos arquivos 20141005.txt
. Outras vezes, posso obter apenas os arquivos 20141002.txt
no diretório 201005
.
Existe alguma sugestão sobre como posso corrigir isso? O GNU paralelo é o preferido, mas também posso testar outros comandos.
Tags bash concurrency gnu-parallel