apt install cifs-utils -y
apt install rsync -y
В файле /etc/credentials разместить данные для досупа к Windows
cat /etc/credentials username=backup_user password=hs47-H7)yM
#!/bin/bash ########################### Constants ########################### #### Данные для подключения по SSH username=backup12345-67 server=backup12345-67.backup.colocall.eu ssh_port=22 ssh_key="/root/.ssh/colocall.key" #Даные для SMB IP=192.168.1.248 MNT_POINT=/mnt/alena/ # Точка мониторвани ls $MNT_POINT >/dev/null || mkdir -p $MNT_POINT SMB_V=3.0 # Версия smb источника CREDENTIAL=/etc/credentials # файл с credentials для smb local_directory=$MNT_POINT #Имя сетевого интерфейса и его IP ETH=enp3s0 # Сколько свежих каталогов оставить COUNT=15 # telegramm BOT_TOKEN="18045447450203:AAGEjU7HKEEGle1Zv2an5sVF49QxNxhw03w" CHAT_ID="33109821804" # тескт сообщений IP_local=$(ip -4 a | grep inet | grep $ETH | awk '/inet/ {print $2}') IP_global=$(curl 2ip.com.ua) MESS="Проблема $0 LAN: $IP_local WAN: $IP_global" ########################### Функции ########################### # Монтирование SMB fun_mount () { MESS="$MESS Ошибка mount" mount -t cifs //$IP/$SHARA_FROM $MNT_POINT -o credentials=$CREDENTIAL -o vers=$SMB_V -o ro if [[ $? -eq 0 ]]; then echo "Ресурс смонтирован. ОК" else echo "Ошибка при монтировании" curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID&text=$MESS" > /dev/null umount $MNT_POINT exit 0 fi } #2 tar fun_tar () { ls "${target_directory}" || mkdir -p "${target_directory}" tar -vczf ${target_directory}`date "+%d-%m-%g_%H-%M-%S"`-Sveta_1cv8.tar.gz $MNT_POINT } #3 rsync fun_rsync () { ssh -p $ssh_port -i $ssh_key $username@$server ls ${target_directory}increment/ >/dev/null || \ ssh -p $ssh_port -i $ssh_key $username@$server mkdir -p ${target_directory}increment/ ssh -p $ssh_port -i $ssh_key $username@$server ls ${target_directory}current/ >/dev/null || \ ssh -p $ssh_port -i $ssh_key $username@$server mkdir -p ${target_directory}current/ rsync -zav --progress --delete -e "ssh -p$ssh_port -i $ssh_key" --recursive "$local_directory" \ "$username@$server:$target_directory/current/" --backup --backup-dir="${target_directory}/increment/$(date +%Y-%m-%d)/" # Удаляем старые каталоги в increment ssh -p $ssh_port -i $ssh_key $username@$server ls -dt "${target_directory}increment"/*/ | \ tail -n +$((COUNT+1)) | xargs -I {} rm -r -- "{}" } #Функция. Сравнить количество файлов локаьных и удаленных fun_count () { REMOTE_COUNT=$(ssh -p$ssh_port -i $ssh_key $username@$server find $target_directory/current/ | wc -l) LOCAL_COUNT=$(find "$local_directory" | wc -l) echo REMOTE_COUNT $REMOTE_COUNT echo LOCAL_COUNT $LOCAL_COUNT if [ "$REMOTE_COUNT" -ne "$LOCAL_COUNT" ]; then echo "ошибка" MESSAGE="Ошибка выполнения скрипта $echo $0 LAN ip $IP_local WAN ip $WAN $IP_global $local_directory Remote: $server $target_directory Колличество файлов не совпадает!!! REMOTE_COUNT $REMOTE_COUNT LOCAL_COUNT $LOCAL_COUNT " curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID&text=$MESSAGE" > /dev/null fi } clear ########################Работаем############################## #Folder 1 desktop SHARA_FROM=Desktop # Shara на windows target_directory=/backup/yurist/desktop/ # каталог на удаленном сервере, в который проводим синхронизацию umount $MNT_POINT fun_mount fun_rsync fun_count #Folder 2 desktop SHARA_FROM=Documents target_directory=/backup/yurist/doc/ umount $MNT_POINT fun_mount fun_rsync fun_count umount $MNT_POINT exit 0