Последовательные и параллельные циклы/команды Bash

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

Вы можете защитить передачу файла зоны между разными хостами различными способами. Во-первых, ведущий может запретить запросы AXFR/IXFR только от своих подчиненных устройств, а подчиненные устройства могут ограничить запросы NOTIFY (подчиненные устройства извлекают данные из главного устройства, поэтому оно является инициатором ). Для более надежной аутентификации у вас есть TSIG. См. это для Bind9:ftp://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch04.html#tsig

Также в настоящее время многие созвездия серверов имен настраиваются из одного источника и/или выделяются из -диапазона -. Например, контент может находиться в базе данных, генерироваться в каком-то месте, а затем распространяться с помощью rsyncили эквивалентно всем серверам имен. Между серверами имен нет DNS-сообщений для обновления их друг от друга.

Отдельным образом вы часто имеете «скрытый» главный :сервер имен, где все изменения файла зоны отображаются для всех общедоступных серверов имен. Там нет возможности MITM, поскольку вы даже не знаете, что есть скрытый мастер, и тем более, где он находится и его IP (, за исключением случаев, когда вы уже смогли получить контроль над одним из серверов имен, и в этом случае это полностью другая проблема ).

И, как я сказал в другом комментарии, теперь у вас есть DNSSEC.Если ваша зона правильно настроена с помощью DNSSEC, даже если кому-то удастся изменить ее содержимое либо на сервере имен, либо при передаче, то любой проверяющий рекурсивный сервер имен обнаружит изменение, поскольку новый ответ будет либо вообще не подписан, либо подписан неправильно.

3
13.03.2020, 13:12
3 ответа

В GNU parallel есть несколько вариантов ограничения использования ресурсов при параллельном запуске заданий.

Основное использование двух вложенных циклов будет

parallel python sim -a {1} -p {2} ::: 1 2 3 4 5 ::: 17.76 20.01 21.510 23.76

Если вы хотите запустить не более 5 заданий одновременно, например, вы можете сказать

parallel -j5 python <etc.>

В качестве альтернативы можно использовать параметр --memfree, чтобы запускать новые задания только при наличии достаточного количества свободной памяти, например. не менее 256 МБ

parallel --memfree 256M python <etc.>

Обратите внимание, что последний параметр удалит самое последнее запущенное задание, если объем памяти упадет ниже 50 % от указанного (значения «резерва», но оно будет повторно -поставлено в очередь для захвата -автоматически )].

5
28.04.2021, 23:20

Как упоминалось в комментариях, это именно то, для чего предназначен GNU parallel:

for simSeed in 1 2 3 4 5
do
    ## Launch 5 instances in parallel 
    parallel -j5 python sim -a $simSeed -p {} ::: 17.76 20.01 21.510 23.76
done
2
28.04.2021, 23:20

Вы можете сохранить соответствующие идентификаторы процессов и waitдля их завершения:

for simSeed in {1..5}; do
  pids=()
  for launchPower in 17.76 20.01 21.510 23.76; do
    python sim -a $simSeed -p $launchPower &
    pids+=($!)
  done
  wait ${pids[@]}
done

pids— массив идентификаторов процессов фоновых заданий внутреннего цикла. С ${pids[@]}все элементы массива передаются команде ожидания.

1
28.04.2021, 23:20

Теги

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