Мне нужно выполнить chmod и chown для сотен тысяч файлов как часть сценария миграции. На выполнение каждой команды уходит около полутора часов. Я понял, что эти две операции могут выполняться одновременно, что сокращает время работы, что я подтвердил тестированием в оболочке.
Я знаю, как отправлять команды в фоновый режим с помощью '&', но мне нужно убедиться, что оба процесса завершились, прежде чем продолжить выполнение остальной части скрипта.
Спасибо
Использовать wait
команда.
Эта демонстрация:
#!/bin/bash
echo $SECONDS
sleep 12&
sleep 15&
jobs
wait
echo $SECONDS
echo "jobs are done"
Производит этот вывод:
0
[1]- Running sleep 12 &
[2]+ Running sleep 15 &
15
jobs are done
Перед выводом двух последних строк делается пятнадцатисекундная пауза.
Вы можете захватить pid и использовать wait.
chmod options
CHMODPID=$!
chown options
CHOWNPID=$!
wait $CHMODPID
wait $CHOWNPID
(должен работать с bash; детали могут отличаться от других типов оболочки)
Если вам нужно убедиться, что оба процесса завершены, прежде чем переходить к следующему шагу, простым решением будет записать что-то в файл и проверить его. Просто нанесите на файл голову или кота (со значением по умолчанию 0) и добавьте 1 в первую строку. Если вы обнаружите 2, то оба процесса завершены. Конечно, добавление нужно делать в самом низу ваших скриптов.