Вы, вероятно, не преследуете правильную проблему, но вы не предоставляете достаточного контекста, чтобы действительно помочь вам взглянуть на вещи в перспективе.
Вы можете защитить передачу файла зоны между разными хостами различными способами. Во-первых, ведущий может запретить запросы 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, даже если кому-то удастся изменить ее содержимое либо на сервере имен, либо при передаче, то любой проверяющий рекурсивный сервер имен обнаружит изменение, поскольку новый ответ будет либо вообще не подписан, либо подписан неправильно.
В 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 % от указанного (значения «резерва», но оно будет повторно -поставлено в очередь для захвата -автоматически )].
Как упоминалось в комментариях, это именно то, для чего предназначен 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
Вы можете сохранить соответствующие идентификаторы процессов и 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[@]}
все элементы массива передаются команде ожидания.