Запустите несколько сценариев и продолжайте работу до тех пор, пока не будет выполнен каждый сценарий

мой вопрос в том, могу ли я запускать сразу несколько сценариев. У меня есть доступ к кластеру с 32 cpus, но в то же время у меня есть 900 скриптов. Теперь то, что я хотел бы сделать, это поставить каждый скрипт в очередь, и как только скрипт будет запущен, еще один. Я не пытаюсь сделать простой цикл, так как я хочу, чтобы все (или почти все) cpus работали параллельно.

Похоже, вы ищете что-то вроде утилиты GNU Parallel . Вот выдержка из его описания:

Для каждой строки входа GNU parallel выполнит команду с линией в качестве аргументов. Если команда не указана, выполняется строка ввода. Несколько строк будут выполняться параллельно.

В вашем случае вы должны ограничить себя 32 параллельными сценариями с чем-то вроде следующего:

parallel -j32 ::: ./script1 ./script2 (...) ./script900 

Или вы можете сделать parallel чтение имен сценариев из файла, или если все прогоны являются экземплярами одного и того же сценария, сохраните только параметры во входном файле и т. Д .; прочитайте документацию по многим возможным вариантам.

Что произойдет, если вы нажмете все скрипты в каталоге, используя:

 for FILE in *.sh; do ./$FILE & done; 

И пусть планировщик процессов выполняет эту работу.