75 lines
2.4 KiB
Bash
Executable File
75 lines
2.4 KiB
Bash
Executable File
#!/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
|