ㅤ
1. Те, кто не делает архивы,
2. Те, кто уже делает архивы,
3. Те, делает и уже проверяет.
🔤🔤🔥🔤🔤🔤🔤
Сейчас многие архиваторы и компрессоры умеют делать архивы в несколько потоков. А, проверяют, почему-то в один.
У меня на СХД валится куча разных архивов и их приходится проверять, чтобы ускорить процесс можно использовать gnu parallel. Мне так не удобно, потому что архивы шифрованные, причем пароли у них разные, удобнее проверять скриптом.
Вот тут Роман набросал рыбу, для использования многопоточности. Я немного упростил. (до 7 необходимыx строк)
#/bin/bash
declare -x PATH="/usr/local/bin:/usr/bin:/bin"
declare -i JOB_NUM=$(nproc)
declare DELAY=0.5
exec >&2
for i in {1..50};do # это цикл по всем заданиям
# это команда, выполняемая в фоне
( sleep $(($SRANDOM % 3 +1)); echo ${SECONDS}_sec ) &
while [[ $(jobs -r -p |wc -l) -ge $JOB_NUM ]];do
sleep $DELAY
echo $i
done
done
echo end loop
wait
echo TOTAL $SECONDS sec
Ну, и небольшая пояснялка:
nproc - число "ядер"DELAY - задержка между проверками окончания выполнения фоновых заданий. Если задание выполняется долго (проверка архива) - можно смело ставить 10-30 секунд.exec >&2 перенаправили весь вывод на stderr. В реалном скрипте можно убрать. (Как и все echo).for - основной цикл по списку всех заданий.sleep $(($SRANDOM % 3 +1)) - собственно фоновое задание. В данном случае пауза 1-3 сек.echo ${SECONDS}_sec - ввел для примера, чтобы показать, что команд в фоновом задании может быть несколько.while - как только запустили нужное число фоновых заданий, начинаем ждать окончания одного или нескольких.echo end loop - как только основной цикл закончился - скрипт можно завершать (но некоторые задания еще могут долго работать).wait - ожидать окончания всех фоновых заданий.echo TOTAL $SECONDS sec - время полного выполнения скрипта.На данный момент все задания завершены. Можно отправлять лог.
man nproc wc
help exec jobs wait
tags: #linux #bash
—
🔔 @bashdays➡️ @gitgate