В первой части все-все-все написано, и там же есть список хотелок. Это собственно реализация оных. Список отличий от исходной версии.
- Сначала стираем старые файлы, потом пишем новые.
- Храним заданное число копий, а не количество дней.
- Изменился формат конфиг-файла (исчез "+" у параметра OLD, теперь это просто число)
- Нет необходимости вручную создавать исходную копию.
- Нет проблем с повторным запуском в течении тех же суток.
- Добавлен ключ -F rsync, нужно использовать файлы .rsync-filter
В общем и целом получилась вполне себе боевая вещь.
Собственно скрипт /usr/local/bin/rsync.increment3
#! /bin/bash ### Определения по-умолчанию MAP='root@10.0.0.3::samba-private/' DEST='/storage/increment/samba-priv' LOGF=/var/log/rsync-samba-priv-add.log OLD=10 ### в $1 передаем имя конфиг-файла if [ ! -z ${1} ] ; then test -r ${1} && . ${1} fi ### Стираем старые копии по числу, а не по дате создания (это важно!) # Стираем только каталоги, файлы типа .notes.txt нам не интересны icount=0 for i in `ls -dr $DEST/20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]` ; do if [ $((icount++)) -ge $((OLD)) ] ; then rm -rf "$i" fi done ### Начали DAY0=`date -I` DAY1=`date -I -d "1 day ago"` # Защита от повторного запуска (передвижка крона, например, для тестов удобно опять же) if [ -d $DEST/$DAY0 ] ; then mv -f $DEST/$DAY0 $DEST/$DAY0-previous fi # Самый свежий каталог по маске date -I с 2010 по 2099 годы :-) # Можно было сохранить $i на первом проходе стирания, но проще еще раз # дернуть ls LNK=`ls -dr $DEST/20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]|head -n 1` # Если совсем пусто, создаем вчерашний пустой if [ -z $LNK ] ; then LNK=$DEST/$DAY1 mkdir -p $LNK echo "LNK not exist..." |logger fi # Опять про повторный запуск, крутим обратно... if [ -d $DEST/$DAY0-previous ] ; then mv -f $DEST/$DAY0-previous $DEST/$DAY0 echo "Previous DAY0 exist..." |logger fi ### Собственно копируем rm -f $LOGF rsync --log-file=$LOGF -aHxAF --del --link-dest=$LNK $MAP $DEST/$DAY0И конфиг
MAP='root@10.0.0.3::samba-public/' DEST='/storage/increment/samba-pub' LOGF=/var/log/rsync-samba-pub.log OLD=30Все остальное без изменений.
Дополнение от 21 апреля 2020.
Для анализа логов совсем простой скриптик. Он посылает на почту лаконично имена лог-файлов, содержащих "rsync error:" Условием работы (из крона) является правильная установка "почтовых" переменных MAILTO и MAILFROM.
#! /bin/bash
FMASK="/var/log/rsync-*.log"
status=""
for i in `ls $FMASK` ; do
if [ `cat $i |grep "rsync error:" | wc -l` -ne 0 ] ; then
status=$i" "$status
fi
done
if [[ -n $status ]] ; then
echo $status
fi
Комментариев нет:
Отправить комментарий