Documenta scelte tecniche e problemi risolti

This commit is contained in:
2026-07-02 14:01:53 +02:00
parent 32d7312240
commit 6b356e8983
3 changed files with 609 additions and 34 deletions

View File

@@ -2,6 +2,8 @@
Bak&Rest monitora cartelle configurate su Windows, registra i file creati, modificati, cancellati o spostati e prepara il backup successivo tramite tray app.
Per il dettaglio delle scelte tecniche, dei problemi risolti e delle decisioni prese durante la messa a punto, leggere anche [DOCUMENTAZIONE_TECNICA.md](DOCUMENTAZIONE_TECNICA.md).
## Componenti
- `BakRestWatchdog`: servizio Windows di monitoraggio.
@@ -126,7 +128,7 @@ In alternativa si puo' chiamare direttamente il modulo dedicato:
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.
Questo percorso e' pensato per Task Scheduler alla disconnessione dell'utente. 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:
@@ -165,33 +167,38 @@ 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
```
Se `schtasks` segnala un errore di encoding XML, usa lo script di registrazione che crea una copia temporanea UTF-16 compatibile con Task Scheduler:
Gli XML sono sorgenti di base. Per registrarli su una macchina reale e' consigliato usare lo script PowerShell, che corregge dinamicamente path Python, working directory e codifica:
```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\Register-BakRestTask.ps1 -Task Notifier
powershell -ExecutionPolicy Bypass -File .\scripts\Register-BakRestTask.ps1 -Task BackupOnLogoff
```
Per registrare il task di backup sull'utente corrente invece che sul gruppo `Users`:
Per il backup al logoff, usare credenziali memorizzate. Questa modalita' e' necessaria perche' al logoff il token interattivo non e' abbastanza affidabile per avviare un processo lungo:
```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\Register-BakRestTask.ps1 -Task BackupOnLogoff -RunAsCurrentUser
powershell -ExecutionPolicy Bypass -File .\scripts\Register-BakRestTask.ps1 -Task BackupOnLogoff -RunAsStoredCredentials -UserName ".\pettirosso"
```
Per debug senza spegnimento:
```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\Register-BakRestTask.ps1 -Task BackupOnLogoff -RunAsCurrentUser -NoShutdown
powershell -ExecutionPolicy Bypass -File .\scripts\Register-BakRestTask.ps1 -Task BackupOnLogoff -RunAsStoredCredentials -UserName ".\pettirosso" -NoShutdown
```
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.
Verifica del task backup:
```powershell
schtasks /Query /TN "BakRest\BackupOnLogoff" /XML |
Select-String "UserId|LogonType|Winlogon|7002|Arguments"
```
Il task di backup usa l'evento `System` del provider `Microsoft-Windows-Winlogon`, `EventID=7002`. Nei test l'evento `Security 4647` veniva scritto ma non agganciava il task in modo affidabile, quindi e' stato abbandonato.
Nel task definitivo deve comparire:
```xml
<LogonType>Password</LogonType>
```
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.