Вызов нескольких сценариев удара и выполнение их параллельно, не в последовательности

В tcsh расширение !:1* эквивалентно !:1-$

Достигнуть, что Вы хотите Вас, должно сделать это:

alias najdi 'echo /usr/ports/*/*\!:1-1* | sed -e "y/ /\n/"'

Лично я предпочитаю использовать find вместо расширения оболочки:

alias najdi 'find /usr/ports -type d -maxdepth 2 -name \*\!:1-1\* -print'
20
22.11.2014, 01:50
8 ответов
for((i=1;i<100;i++)); do nohup bash script${i}.sh & done
16
27.01.2020, 19:43

Если вы хотите сэкономить себе некоторые усилия набора текста

eval "nohup bash "script{1..3}.sh" &"

или на второй мыслях, может быть, нет

2
27.01.2020, 19:43

Мы также можем использовать XARGS для запуска нескольких сценариев параллельно.

$ ls script{1..5}.sh|xargs -n 1 -P 0 bash

Здесь каждый скрипт передан в Bash в качестве аргумента отдельно. -P 0 указывает, что количество параллельного процесса может быть максимально максимально. Также безопаснее, что используя функцию управления заданиями (&) .

9
27.01.2020, 19:43

Одно решение строка:

$ nohup bash script1.sh & nohup bash script2.sh & nohup bash script3.sh &

Менее грациозно, просто используйте оберточный сценарий:

$ cat script.sh
#!/usr/bin/env bash
script1.sh &
script2.sh &
script3.sh &
$ nohup script.sh &

Или зацикливайте их:

for script in dir/*.sh
do
    nohup bash "$script" &
done
5
27.01.2020, 19:43

Я предлагаю гораздо более простую утилиту, которую я только что написал. В настоящее время он называется наравне, но будет переименован в ближайшее время на либо Pary или PLL, еще не решил.

https://github.com/k-bx/par

API так же просто, как:

par "script1.sh" "script2.sh" "script3.sh"
0
27.01.2020, 19:43

Лучшим способом было бы использовать GNU Parallel . Параллельный GNU прост, и с его помощью мы можем контролировать количество заданий, выполняемых параллельно, с большим контролем над заданиями.

В приведенной ниже команде сценарий {1..3} .sh раскрывается и передается в качестве аргументов в bash параллельно. Здесь -j0 указывает, что нужно запустить как можно больше заданий. По умолчанию parallel выполняет одно задание для одного ядра процессора.

$ parallel -j0 bash :::: <(ls script{1..3}.sh)

И вы также можете попробовать использовать

$ parallel -j0 bash ::: script{1..3}.sh

При выполнении второго метода, если вы получите какое-либо сообщение об ошибке, это означает, что параметр - tollef установлен в / etc / parallel / config , и его нужно удалить, и все будет работать нормально.

Вы можете прочитать GNU Parallels страницу руководства здесь для более обширных опций.

А в случае, если вы запускаете задания с удаленного компьютера, лучше использовать screen , чтобы сеанс не закрывался из-за сетевых проблем. nohup не требуется, так как последние версии bash поставляются с huponexit как off , и это не позволяет родительской оболочке отправлять сигнал HUP своим детям во время его выхода. Если он не отключен, сделайте это с помощью

$ shopt -u huponexit  
15
27.01.2020, 19:43

Используйте parallelshell

parallelshell "echo 1" "echo 2" "echo 3"

https://github.com/keithamus/parallelshell

0
27.01.2020, 19:43

Запишите все свои команды в родительский скрипт (parent _script.sh ), который выглядит следующим образом:

bash script1.sh &
bash script2.sh &
bash script3.sh &
wait

Добавление «подождите» в конце скрипта запустит его параллельно. Затем отправьте родительский скрипт с nohup.

nohup bash parent_script.sh
1
04.04.2021, 20:06

Теги

Похожие вопросы