190 lines
5.3 KiB
Markdown
190 lines
5.3 KiB
Markdown
# 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.
|
|
|
|
Il servizio Windows non controlla il server di backup: resta dedicato al solo watchdog dei file. La raggiungibilita' dello slave viene controllata dal notifier schedulato.
|
|
|
|
Quando il notifier rileva che il server di backup non e' raggiungibile, mostra una finestra con:
|
|
|
|
```text
|
|
Accendi il server di backup o verifica che sia connesso alla rete
|
|
```
|
|
|
|
Il notifier puo' essere eseguito da Task Scheduler con:
|
|
|
|
```powershell
|
|
python -m bakrest.server_notifier
|
|
```
|
|
|
|
Azione Task Scheduler consigliata:
|
|
|
|
```text
|
|
Programma: C:\Python314\python.exe
|
|
Argomenti: -m bakrest.server_notifier
|
|
Avvia in: C:\devel\bak&rest
|
|
```
|
|
|
|
Schedulazione consigliata: all'accesso dell'utente e poi ogni 30 minuti. Il notifier mostra l'avviso una sola volta mentre il server resta non raggiungibile, poi si resetta quando il server torna raggiungibile.
|
|
|
|
## 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
|
|
interval_seconds = 1800
|
|
```
|
|
|
|
## Task Scheduler
|
|
|
|
Sono disponibili XML importabili in Task Scheduler:
|
|
|
|
```text
|
|
tasks\BakRestBackupOnLogoff.xml
|
|
tasks\BakRestServerNotifierEvery30Minutes.xml
|
|
```
|
|
|
|
Importazione da PowerShell:
|
|
|
|
```powershell
|
|
schtasks /Create /TN "BakRest\BackupOnLogoff" /XML "tasks\BakRestBackupOnLogoff.xml" /F
|
|
schtasks /Create /TN "BakRest\ServerNotifierEvery30Minutes" /XML "tasks\BakRestServerNotifierEvery30Minutes.xml" /F
|
|
```
|
|
|
|
Il task di backup usa l'evento Security `4647`, cioe' logoff/disconnessione iniziata dall'utente. Se sulla macchina questo evento non viene scritto, bisogna abilitare l'audit logoff oppure useremo un trigger alternativo.
|
|
|
|
Il task notifier usa un trigger al logon e un trigger giornaliero con ripetizione `PT30M`, quindi avvisa durante la giornata anche se non viene usata la tray app.
|
|
|
|
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`.
|