Цикл каждого сценария в папке как параллельное задание, - PullRequest
0 голосов
/ 28 октября 2019

У меня есть необходимость запускать скрипты в папках и паролел заданий.

Вот как выглядит структура моей папки:

.
├── quo1374
├── quo2147
├── quo1407
......
├── quo1342
│   ├── dist
│   │   └── v0.1.0-alpha
│   │       └── unix
│   │           └── mjolnir
│   ├── examples
│   │   ├── values-local-134217728-m4.2xlarge.yaml
│   │   
│   ├── remote_script.sh
│   └── run
│       ├── quo1342-134217728-m4.2xlarge
│       │   ├── quo1342-134217728-m4.2xlarge
│       │   └── quo1342-134217728-m4.2xlarge.sh
│       ├── quo1342-134217728-m4.xlarge
│       │   ├── quo1342-134217728-m4.xlarge
│       │   └── quo1342-134217728-m4.xlarge.sh
│       ├── quo1342-134217728-m5.12xlarge
│       │   ├── quo1342-134217728-m5.12xlarge
│       │   └── quo1342-134217728-m5.12xlarge.sh
│       ├── quo1342-134217728-m5.16xlarge
│       │   ├── quo1342-134217728-m5.16xlarge
│       │   └── quo1342-134217728-m5.16xlarge.sh
│       ├── quo1342-134217728-m5.24xlarge
│       │   ├── quo1342-134217728-m5.24xlarge
│       │   └── quo1342-134217728-m5.24xlarge.sh
│       ├── quo1342-134217728-m5.4xlarge
│       │   ├── quo1342-134217728-m5.4xlarge
│       │   └── quo1342-134217728-m5.4xlarge.sh
│       ├── quo1342-134217728-m5.8xlarge
│       │   ├── quo1342-134217728-m5.8xlarge
│       │   └── quo1342-134217728-m5.8xlarge.sh
│       ├── quo1342-134217728-m5.metal
│       │   ├── quo1342-134217728-m5.metal
│       │   └── quo1342-134217728-m5.metal.sh
│       ├── quo1342-134217728-t2.2xlarge
│       │   ├── quo1342-134217728-t2.2xlarge
│       │   └── quo1342-134217728-t2.2xlarge.sh
│       ├── quo1342-134217728-t3a.2xlarge
│       │   ├── quo1342-134217728-t3a.2xlarge
│       │   └── quo1342-134217728-t3a.2xlarge.sh
│       └── quo1342-134217728-t3a.xlarge
│           ├── quo1342-134217728-t3a.xlarge
│           └── quo1342-134217728-t3a.xlarge.sh

Например, скрипт └── quo1342-134217728-m4.2xlarge.sh запускает одно задание. Это подмножество работ, которые я хотел бы выполнить. Я пытаюсь придумать как ript, который будет брать содержимое run/quo134*/quo1342-134217728*.sh и запускать его как отдельное задание, т. Е. При активации я буду перебирать каждый из сценариев в папке, но вся работа будет выполняться&. Причина в том, что у меня есть около 12 отдельных папок, которые выглядят так. Я хотел бы запустить их параллельно. однако важно, чтобы скрипты внутри папок запускались последовательно.

Вот попытка того, что я пытаюсь сделать. Хотя это не работает, я надеюсь, что это внесет ясность в мой вопрос.

for f in *
do cd $f/run 
    for f in *.sh

      bash "$f" -H &
      cd ..
    done
done

Буду признателен за любые указатели по этому вопросу.

Обновление

Ответы dash-o помогло, но привело к другой проблеме. Скрипты bash используют относительные пути, например .. quo1342-134217728-t3a.xlarge.sh содержит ссылки типа

../../dist/v0.1.0-alpha/unix/mjolnir 

, когда я использую ваш скрипт, он запускается, но кажется, что выполнение не учитывает путь к файлув скрипте то есть

 ssh: Could not resolve hostname : Name or service not known + ../../dist/v0.1.0-alpha/unix/mjolnir destroy ../../examples/values-local-549755813888-t3a.xlarge.yaml 

Есть ли способ запустить скрипт, который не нарушает это

1 Ответ

2 голосов
/ 28 октября 2019

Вы можете реализовать с помощью функции помощи

Function run_folder {
   local  dir=$1 f=
   cd $dir/run
   # sequential execution
   for f in */*.sh ; do
       # Execute each test in it's folder.
       (cd ${f%/*} && bash ${f##*/} -H)
   done
}

# parallel execution 
For j in * ; do
   run_folder $j &
Done
wait
...