Написание прогресса rsync в IFS - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть рабочий резервный скрипт, использующий одну команду rsync для каждого файла, который нужно сохранить.

Теперь я хочу сообщить о ходе выполнения каждой команды rsync в базу данных mysql.Поэтому мне нужно, чтобы вывод --info = progress2 был разбит на массив.

Решение, которое у меня есть, использует именованный канал и второй сценарий, читающий из этого именованного канала и записывающий в mysql.Но я думаю, что должно быть лучшее решение без именованной трубы.Разве невозможно записать вывод rsync непосредственно в IFS?

Это (сокращенные) сценарии, которые я сейчас использую:

Сценарий резервного копирования:

#! /bin/bash
# /root/pipewriter.sh

pipe=/root/rpipe
/root/pipereader.sh $pipe &

# Waiting for pipereader to come up
while [ ! -p $pipe ]
do
  # do nothing, just waiting for the pipe to be ready
  :
done

rsync --info=progress2 /root/source.file /root/destination.file > $pipe
echo "quit" > $pipe

exit 0

Сценарий, читающий из канала и разбивающий прогресс на массив:

#! /bin/bash
# /root/pipereader.sh

pipe=$1

trap "rm -f $pipe" EXIT

if [ ! -p $pipe ]; then
  mknod $pipe p
fi

while true
do
  if read line < $pipe ; then
    if [[ "$line" == "quit" ]]; then
      break
    fi

    IFS=' ' read -ra vals <<< "$line"
    for i in "${vals[@]}"; do
      echo $i >> foobar.txt 
      # doing here mysql commands with $i later
    done
  fi
done

exit 0

это работает, но я не думаю, что это лучшее решение?

...