URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9748
[ Назад ]

Исходное сообщение
"rsync двусторонняя синхронизация"

Отправлено forestbeast , 01-Окт-13 00:31 
Всем приве!
сразу предупрежу, я в написании скриптов новичок.
пытаюсь написать скрипт для двусторонней синхронизации с помощью rsync.
идея в том, что когда юзер делает логаут, запускается rsync. вот как я это решил реализовать:
#!/bin/bash
#

USER_BASE1=./base/user_base1;
USER_BASE2=./base/user_base2;
DIFF=./base/diff;
HOMEDR=./base/homedir;
STR=1;
STR=$BSTR;
TRGT=Х.Х.Х.Х;
LOGFILE=./rsync.log;
RSYNC=/opt/rsync/bin/rsync;

exec 6>&1
exec > $LOGFILE

#беру списки пользователей из who, т.к. данные пользователи хранятся в базе LDAP и другим способом я не придумал как извлечь их.
who | awk '{print $1}' > $USER_BASE1;
sleep 30m; #за такое время предполагается, что вывод who изменится
who | awk '{print $1}' > $USER_BASE2;

#здесь будут храниться юзеры, которые сделали логаут
comm -23 $USER_BASE1 $USER_BASE2 | grep -v "^root" > $DIFF;

#получаю username
while [ -n $uid ]
do
    
    
#получаю homedir таким способом, потому что другим не выйдет-используется Solaris с Trusted Extension и домашние директории юзеров хранятся в своих лейбелах
    
        if [ -n `cat $HOMEDR | grep $uid  | cut -d ":" -f2` ]
            then
                export homedir=`cat $HOMEDR | grep $uid  | cut -d ":" -f2`
            else
                export homedir=`find /zone/*/home/ -name $uid 2>/dev/null`
                                echo $uid":"$homedir>>$HOMEDR;
        fi
#запускаю rsync    
    $RSYNC --rsync-path=$RSYNC --modify-window=1 --delete -tucaHSzprogl  -e 'ssh -i ~/.ssh/rsync' $homedir/ root@$TRGT:$homedir/;
    
    export STR=$((STR + 1));

done

echo `date`\ "Sync complete";
exec 1>&6 6>&-
echo
exit 0

в итоге в логи валится


file has vanished: "/proc/5835/path/3"
file has vanished: "/proc/5841/path/3"
file has vanished: "/proc/5867/path/3"
file has vanished: "/proc/5855/path/3"
file has vanished: "/proc/5861/path/3"
file has vanished: "/proc/5873/path/3"

я думаю, что я не правильно создал конструкцию while + if. может можно как-то это изменить?
и ещё вопрос.как перенаправить в логи вывод исполняемых команд?

Содержание

Сообщения в этом обсуждении
"rsync двусторонняя синхронизация"
Отправлено zd3n , 01-Окт-13 07:27 
Для двухсторонней синхронизации проще использовать Unison.

http://ru.wikipedia.org/wiki/Unison
http://www.cis.upenn.edu/~bcpierce/unison/