Я пытаюсь запустить фрагмент кода на большом компьютерном кластере, чтобы проанализировать различные части данных.
Я создал 2 цикла для назначения заданий различным узлам и процессорам, которые содержат узлы.
Функция анализа, которую я написал, 'chnJob ()', просто должна взять индекс, чтобы знать, какую часть данных она должна анализировать (в данном случае это переменная оболочки, называемая 'chn').
цикл выглядит так:
for NODE in $NODES; do # Loop through nodes
for job_idx in {1..$PROCS_PER_NODE}; do # Loop through jobs per node (8 per node)
echo "this is the channel $chn"
ssh $NODE "matlab -nodisplay -nodesktop -nojvm -nosplash -r 'cd $WORK_DIR; chnJob($chn); quit'" &
let chn++
sleep 2
done
done
Несмотря на то, что я вижу, что переменная chn правильно увеличивается, значение chn, которое передается функции matlab, всегда является последним значением chn.
Вероятно, это связано с тем, что matlab занимает много времени для открытия каждого узла, а bash к тому времени завершает циклы. Таким образом, значение, которое передается каждому экземпляру matlab, является только последним значением.
Есть ли способ обойти это? Могу ли я «запечь» значение этой переменной при вызове функции?
Или проблема совсем в другом?