# Bak&Rest Bak&Rest monitora cartelle configurate su Windows, registra i file creati, modificati, cancellati o spostati e prepara il backup successivo tramite tray app. ## Componenti - `BakRestWatchdog`: servizio Windows di monitoraggio. - `BakRestTray`: tray app che eseguira' il backup e lo spegnimento. - `BakRestConfig`: GUI di configurazione. ## Configurazione Alla prima esecuzione viene creato un file TOML modificabile in: ```text %PROGRAMDATA%\BakRest\config.toml ``` Per creare o trovare il file di configurazione: ```powershell python -m bakrest.config_cli init python -m bakrest.config_cli path ``` In sviluppo si puo' usare un percorso diverso: ```powershell $env:BAKREST_CONFIG="C:\devel\bak&rest\config\config.toml" python -m bakrest.watchdog_runner ``` ## Avvio watchdog in console per test ```powershell python -m pip install -e . python -m bakrest.watchdog_runner ``` ## Avvio tray app per test ```powershell python -m pip install -e . python -m bakrest.tray_app ``` La tray app legge lo stato prodotto dal servizio e offre il comando `Backup e spegni`. Se il backup fallisce, lo spegnimento non viene eseguito. ## Backup senza GUI per Task Scheduler Lo stesso entry point della tray puo' eseguire il backup senza mostrare icone o finestre: ```powershell python -m bakrest.tray_app --nogui ``` Per testare senza spegnere il PC: ```powershell python -m bakrest.tray_app --nogui --no-shutdown ``` In alternativa si puo' chiamare direttamente il modulo dedicato: ```powershell python -m bakrest.backup_nogui ``` Questo percorso e' pensato per Task Scheduler, per esempio su evento di disconnessione o fine sessione. Se il server non e' raggiungibile o il backup fallisce, il comando termina con errore e non spegne il PC. Azione Task Scheduler consigliata in sviluppo: ```text Programma: C:\Python314\python.exe Argomenti: -m bakrest.tray_app --nogui Avvia in: C:\devel\bak&rest ``` ## Motore backup Windows Il default e' `robocopy`, pensato per copiare verso share SMB su un server Windows: ```toml [backup] engine = "robocopy" server_host = "backup-server" remote_destinations = [ "\\\\backup-server\\BakRest1", "\\\\backup-server\\BakRest2", ] robocopy_path = "robocopy" [backup.server_check] type = "tcp" port = 445 ``` La copia ricrea il percorso relativo sotto ogni share. Se una cartella monitorata e' `D:\Lavori`, il file `D:\Lavori\Cliente\a.psd` viene copiato in: ```text \\backup-server\BakRest1\Lavori\Cliente\a.psd \\backup-server\BakRest2\Lavori\Cliente\a.psd ``` Il programma non usa opzioni distruttive di `robocopy`: non usa `/MIR` e non usa `/PURGE`. Le cancellazioni sul master non vengono propagate allo slave. Per una prova senza spegnimento: ```text Programma: C:\Python314\python.exe Argomenti: -m bakrest.tray_app --nogui --no-shutdown Avvia in: C:\devel\bak&rest ``` ## Avvio GUI configurazione ```powershell python -m pip install -e . python -m bakrest.config_app ``` La GUI permette di modificare la configurazione e vedere la coda dei file in attesa di backup. I file in coda restano persistenti anche se il computer viene spento senza eseguire il backup. ## Installazione servizio Windows Da PowerShell avviato come amministratore: ```powershell python -m pip install -e . python -m bakrest.service install python -m bakrest.service start ``` Se `service.autostart = true`, il comando `install` configura il servizio con avvio automatico. Se e' `false`, il servizio viene installato con avvio manuale. Il valore puo' essere sempre sovrascritto passando esplicitamente le opzioni di `pywin32`. Comandi utili: ```powershell python -m bakrest.service stop python -m bakrest.service remove python -m bakrest.service debug ``` Il servizio si chiama `BakRestWatchdog`.