Предположим, у меня есть пять сценариев Bash (.sh
) в папке (my_folder
), и они названы так:
script_1.sh
script_2.sh
script_3.sh
script_4.sh
script_5.sh
Как написать шестой сценарий Bash или просто один вкладыш, который начнет запускать все эти сценарии вместе?
Мне нужно, чтобы пять сценариев запускались все вместе одновременно, а не один за другим.
GNU parallel
идеально подходит для этого вида вещи. Установка с sudo apt install parallel
и затем:
parallel -j0 ::: my_folder/*sh
-j
средства управления, сколько процессов t выполненный параллельно, и -j0
означает "всех их". Установите его на другое значение (например. -j20
) запускать скрипты в пакетах вместо этого.
Существует инструмент для этого, читать man run-parts
.
Например, я делаю:
run-parts ${visorhome}/pbackup.d/
в моем Palm Pilot копируют сценарий. ${visorhome}/pbackup.d/
:
01PopulateJpilot 02Extract_Pedometer 03URLs 04google 05Books 06Weight 07Sec 08Bkgm 50hardlinks
Выполнять все *.sh
сценарии в my_folder
каталог одновременно с помощью xargs
:
$ ls my_folder/*.sh | xargs -P0 -n1 bash
Ограничить количество одновременно выполняемых сценариев к 10
:
$ ls my_folder/*.sh | xargs -P10 -n1 bash
Для запущения всех скриптов, одновременно (параллельно) используйте:
script_1.sh &
script_2.sh &
script_3.sh &
script_4.sh &
script_5.sh &
Для выполнения, один за другим (последовательно) используйте:
script_1.sh &&
script_2.sh &&
script_3.sh &&
script_4.sh &&
script_5.sh
Если у Вас есть 200 сценариев, Вы хотите работать одновременно (который мог бы сорвать машину BTW), используют этот сценарий:
#!/bin/bash
for Script in my_folder/*.sh ; do
echo bash "$Script" &
done
Установите атрибуты сценария на исполняемый файл с командой:
chmod a+x /path/to/script.sh
В первый раз, когда Вы запускаете скрипт, он только повторит названия этих 200 сценариев, которые он будет выполнять. Когда Вы рады, что правильные имена выбираются, редактируют сценарий и изменяют эту строку:
echo bash "$Script" &
кому:
bash "$Script" &
Существует три способа, которыми можно назвать сценарий удара от другого, как отвечено здесь:
Сделайте другой исполняемый файл сценария, добавьте
#!/bin/bash
строка наверху и путь, где файл к$PATH
переменная среды. Затем можно назвать его как нормальную команду;Или назовите его с исходной командой (псевдоним.) как это:
source /path/to/script
;Или используйте команду удара для выполнения его:
/bin/bash /path/to/script
;
В случае OP один или несколько из этих 200 сценариев не содержал хижину #!/bin/bash
первая строка в файле. Опция 3 как таковая. должен был использоваться.
Комментарий был повышен о том, "работают ли они одновременно". В типичных 8 системах ЦП 25 сценариев будут совместно использовать один ЦП одновременно, но только один один сценарий выполнится за один раз, пока это не будет интервал времени (измеряемый в миллисекундах), заканчивается. Затем следующее задание получит свою справедливую долю миллисекунд, затем следующее задание, и т.д., и т.д.
В свободных терминах мы можем сказать, что 200 заданий работают "одновременно", но не "одновременно" через 8 центральных процессоров, который приравнивается к 25 заданиям на ЦП:
Выше изображения и комментариев ниже из планировщика ядра Linux