#!/bin/bash export DISPLAY=:1 export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus SRC="/home/fox/Share" DST="fox@archevod.netcraze.pro:/home/fox/" DST_LOCAL="fox@seeed:/home/fox/" LOCKFILE="/home/fox/bin/rsync_watch.lock" LOGFILE="/home/fox/bin/log/rsync_watch.log" NOTIFY="notify-send" IP=$(ip -4 addr show wlan0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}') TARGET_IP="192.168.1.3" # Проверяем размер файла в байтах FILESIZE=$(stat -c%s "$LOGFILE") # 100 мегабайт в байтах LIMIT=$((100 * 1024 * 1024)) log() { echo -e "$(date '+%Y-%m-%d %H:%M:%S') $*" | tee -a "$LOGFILE" } if [ "$FILESIZE" -gt "$LIMIT" ]; then : >"$LOGFILE" # Очищаем файл (альтернативно можно использовать > "$FILE") log "Файл был очищен \"$(date)\"" log "" fi # Проверка наличия inotifywait if ! command -v inotifywait &>/dev/null; then log "Ошибка: inotifywait не установлен. Установите inotify-tools." exit 1 fi if [[ "$IP" == "$TARGET_IP" ]]; then log "Старт наблюдения за $SRC\n Цель: $DST_LOCAL\n" else log "Старт наблюдения за $SRC\n Цель: $DST\n" fi while true; do inotifywait -r -e modify,create,delete,move "$SRC" >/dev/null 2>&1 # Проверка на наличие блокировки if [ -f "$LOCKFILE" ] && kill -0 "$(cat "$LOCKFILE")" 2>/dev/null; then log "Пропущено: rsync уже запущен (PID $(cat "$LOCKFILE"))" continue fi # Установка блокировки echo $$ >"$LOCKFILE" sleep 20 SECONDS=0 $NOTIFY "🔁 Начата синхронизация..." log "----------------------------------------" log "Изменения обнаружены. Запуск rsync..." log "Local IP address = $IP" if [[ "$IP" == "$TARGET_IP" ]]; then rsync -auvhH --delete "$SRC" "$DST_LOCAL" >>"$LOGFILE" 2>&1 else rsync -auvhH -e "ssh -p 3022" --delete "$SRC" "$DST" >>"$LOGFILE" 2>&1 fi log "Синхронизация завершена за $SECONDS сек." log "----------------------------------------\n" $NOTIFY "🔁 Синхронизация завершена за $SECONDS сек." # Удаление блокировки rm -f "$LOCKFILE" done