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 ########################### #Даные для SMB IP=192.168.1.250 CREDENTIAL=/etc/credentials # файл с credentials для smb SMB_V=3.0 # Версия smb источника MNT_POINT=/mnt/sveta/ # Точка мониторвани ls $MNT_POINT >/dev/null|| mkdir -p $MNT_POINT 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 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 () { ls "${target_directory}increment/" || mkdir -p "${target_directory}increment/" ls "${target_directory}current/" || mkdir -p "${target_directory}current/" rsync -zav --progress --delete --recursive $local_directory $target_directory/current/ --backup --backup-dir=${target_directory}/increment/$(date +%Y-%m-%d)/ # Удаляем старые каталоги в increment ls -dt "${target_directory}increment"/*/ | tail -n +$((COUNT+1)) | xargs -I {} rm -r -- "{}" } #4 Сравнить количество файлов локаьных и удаленных fun_count () { REMOTE_COUNT=$(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 Medoc umount $MNT_POINT SHARA_FROM=zvit_arc/ # Shara на windows target_directory=/mnt/disk2/backup/zvit_arc/ # каталог на сервере, в который проводим синхронизацию fun_mount fun_rsync fun_count #tar_1c umount $MNT_POINT SHARA_FROM=1с_82 # Shara target_directory=/mnt/disk2/backup_2024/Sveta/1c_82_tar/ fun_mount fun_tar umount $MNT_POINT exit 0