Назад | Перейти на главную страницу

Как мне запустить две разные длительные команды одновременно в сценарии bash?

Мне нужно выполнить 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, то оба процесса завершены. Конечно, добавление нужно делать в самом низу ваших скриптов.