The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"rsync двусторонняя синхронизация"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"rsync двусторонняя синхронизация"  +/
Сообщение от forestbeast (ok) on 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

#беру списки пользователей из [i]who[/i], т.к. данные пользователи хранятся в базе LDAP и другим способом я не придумал как извлечь их.
who | awk '{print $1}' > $USER_BASE1;
sleep 30m; #за такое время предполагается, что вывод [i]who[/i] изменится
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. может можно как-то это изменить?
и ещё вопрос.как перенаправить в логи вывод исполняемых команд?
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "rsync двусторонняя синхронизация"  +/
Сообщение от zd3n (ok) on 01-Окт-13, 07:27 
Для двухсторонней синхронизации проще использовать Unison.

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру