knihovna:skripty:skript-indexace-na-vyzadani
Obsah
INDEXACE HDD na vyžádání a povolení SKRIPT BASH Synology plánovač
požadavek:
Selektivní vypínání indexace jen pro HDD volumes aby mohly většinu času spát
Princip
#!/bin/bash ############################################################################### # Název: Indexace HDD bez narušení hibernace (DSM 7.2) # Autor: J + Copilot # # ÚČEL: # Tento skript umožňuje, aby HDD (volume2, volume3, USB) na Synology mohly # spolehlivě hibernovat. DSM běžně probouzí HDD kvůli indexaci, což brání # úspornému režimu. Skript proto: # # 1) Dočasně přidá HDD složky do indexeru # 2) Spustí kompletní indexaci # 3) Sleduje /var/log/synoindex.log a čeká na "done" # 4) Po dokončení složky z indexeru odebere # 5) Pošle DSM notifikaci # # Výsledek: # HDD se indexují jen tehdy, když chceš (ručně nebo časovačem). # Jinak DSM HDD neskenuje → disky mohou hibernovat. # # OCHRANY: # - Lock file: zabrání dvojímu spuštění skriptu # - Kontrola, zda už neběží indexace (proces synoindexd) # - Logování na SSD (volume1), aby se HDD neprobouzely # # Doporučené použití: # Spouštět ručně nebo pomocí Plánovače úloh (např. 1× týdně / měsíčně). ############################################################################### # ----------------------------------------- # Nastavení # ----------------------------------------- LOGDIR="/volume1/ZPRAVY_Systemu" DATE=$(date +"%Y-%m-%d_%H-%M") LOGFILE="$LOGDIR/indexace_$DATE.log" INDEXLOG="/var/log/synoindex.log" LOCKFILE="$LOGDIR/index.lock" mkdir -p "$LOGDIR" echo "===== START INDEXACE $(date) =====" >> "$LOGFILE" # ----------------------------------------- # Ochrana proti dvojímu spuštění # ----------------------------------------- if [ -f "$LOCKFILE" ]; then echo "[ERROR] Skript už běží (lock file existuje): $LOCKFILE" >> "$LOGFILE" exit 1 fi touch "$LOCKFILE" # ----------------------------------------- # Kontrola, zda už neběží indexace # ----------------------------------------- if pgrep -x "synoindexd" >/dev/null 2>&1; then echo "[ERROR] Indexace už probíhá (proces synoindexd běží) – skript končí" >> "$LOGFILE" rm -f "$LOCKFILE" exit 1 fi # ----------------------------------------- # Seznam HDD/USB složek k indexaci # ----------------------------------------- SHARES=" /volume2/cesta1 /volume2/cesta2 /volume3/VOL3-cesta3 /volume3/VOL3-cesta4 /volumeUSB1/usbshare1 " SHARES_CLEAN=$(echo "$SHARES" | sed '/^\s*$/d') echo "[INFO] Složky k indexaci:" >> "$LOGFILE" echo "$SHARES_CLEAN" >> "$LOGFILE" # ----------------------------------------- # Přidání složek do indexeru # ----------------------------------------- echo "[INFO] Přidávám složky do indexu" >> "$LOGFILE" while read -r DIR; do [ -z "$DIR" ] && continue if [ -d "$DIR" ]; then echo "[ADD] $DIR" >> "$LOGFILE" /usr/syno/bin/synoindex -A "$DIR" >> "$LOGFILE" 2>&1 else echo "[MISS] $DIR (adresář neexistuje)" >> "$LOGFILE" fi done <<< "$SHARES_CLEAN" # ----------------------------------------- # Spuštění reindexace # ----------------------------------------- echo "[INFO] Spouštím reindexaci (synoindex -R all)" >> "$LOGFILE" /usr/syno/bin/synoindex -R all >> "$LOGFILE" 2>&1 # ----------------------------------------- # Čekání na dokončení indexace (log /var/log/synoindex.log) # ----------------------------------------- echo "[INFO] Čekám na dokončení indexace (sledování $INDEXLOG)..." >> "$LOGFILE" if [ ! -f "$INDEXLOG" ]; then echo "[WARN] Log $INDEXLOG neexistuje – nelze sledovat stav indexace" >> "$LOGFILE" else START_LINE=$(wc -l < "$INDEXLOG") while true; do sleep 10 NEW_LINES=$(sed -n "$((START_LINE+1)),\$p" "$INDEXLOG") if echo "$NEW_LINES" | grep -qi "done"; then echo "[INFO] V logu indexace nalezeno 'done' – indexace považována za dokončenou" >> "$LOGFILE" break fi done fi echo "[INFO] Indexace dokončena (nebo nelze dále sledovat)" >> "$LOGFILE" # ----------------------------------------- # Odebrání složek z indexeru # ----------------------------------------- echo "[INFO] Odebírám složky z indexu" >> "$LOGFILE" while read -r DIR; do [ -z "$DIR" ] && continue if [ -d "$DIR" ]; then echo "[DEL] $DIR" >> "$LOGFILE" /usr/syno/bin/synoindex -D "$DIR" >> "$LOGFILE" 2>&1 fi done <<< "$SHARES_CLEAN" # ----------------------------------------- # Notifikace DSM # ----------------------------------------- /usr/syno/bin/synodsmnotify @administrators "Indexace HDD + USB dokončena" echo "===== HOTOVO $(date) =====" >> "$LOGFILE" # ----------------------------------------- # Úklid lock file # ----------------------------------------- rm -f "$LOCKFILE"
Takže čekání na dokončení uděláme takto:
- spustíme indexaci
- každých 10 sekund zkontrolujeme, zda se v logu objevil nový „done“
- jakmile ano → indexace skončila
- To funguje vždy, bez ohledu na PATH, bez pgrep, bez procesů.
🕒 Doporučené nastavení v Task Scheduleru
- User: root
- Trigger: weekly → 03:00
- Enabled: yes
- Run command: vložit skript výše
použitá verze:
knihovna/skripty/skript-indexace-na-vyzadani.txt · Poslední úprava: autor: JJC
