Я запускаю несколько команд 'shred' на нескольких жестких дисках на рабочей станции. Все команды 'shred' запускаются в фоновом режиме, чтобы запускать команды одновременно. Вывод каждого 'клочка' перенаправляется в текстовый файл, и у меня также есть вывод, направленный на терминал. Я использую tail для отслеживания файла журнала на наличие ошибок и прекращения работы сценария, если таковые имеются. Если ошибок нет, скрипт должен просто продолжить работу до завершения. Когда я проверяю его, форсируя сбой диска (отключая диск), он обнаруживает ошибки ввода-вывода, и сценарий останавливается, как и ожидалось. У меня проблема в том, что когда ошибок НЕТ, я не могу заставить 'tail' завершиться после завершения команд 'shred', и сценарий просто зависает в этой точке. Поскольку я добавил команду 'tail' в поле 'while' l oop ниже, я бы подумал, что tail будет продолжать работать до тех пор, пока выполняются процессы 'shred', но затем остановится после 'shred' 'процессы остановлены, что завершает' while 'l oop. Но это не так. Сценарий по-прежнему зависает даже после завершения процессов уничтожения. Если я go перейду к другому терминальному окну, пока скрипт «зависает», и завершу процесс «tail», скрипт продолжится как обычно. Есть идеи, как завершить процесс «хвоста», когда процессы «клочков» исчезнут?
Мой код:
shred -n 3 -vz /dev/sda 2>&1 | tee -a logfile &
shred -n 3 -vz /dev/sdb 2>&1 | tee -a logfile &
shred -n 3 -vz /dev/sdc 2>&1 | tee -a logfile &
pids=$(pgrep shred)
while kill -0 $pids 2> /dev/null; do
tail -qn0 -f logfile | \
read LINE
echo "$LINE" | grep -q "error"
if [ $? = 0 ]; then
killall shred > /dev/null 2>&1
echo "Error encountered. Halting."
exit
fi
done
wait $pids
Есть другой код после 'wait', который выполняет другие действия, но это где скрипт висит