Init commit
This commit is contained in:
74
bin/rsync.sh
Executable file
74
bin/rsync.sh
Executable file
@@ -0,0 +1,74 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user