Eliminare le vecchie registrazioni di chiamate
Come eliminare automaticamente le registrazioni di chiamate più vecchie di un numero specificato di giorni su NethVoice
Obiettivo della guida
Lo scopo di questa guida è spiegare come configurare l'eliminazione automatica delle registrazioni di chiamate su NethVoice e descrivere la configurazione, il funzionamento e le procedure di pulizia dei dati per garantire un'eliminazione sicura delle vecchie registrazioni.
Introduzione
NethVoice archivia le registrazioni di chiamate come file nel file system e mantiene i riferimenti ai metadati in un database MariaDB. Nel corso del tempo, le registrazioni possono consumare spazio su disco significativo. La funzionalità di eliminazione delle registrazioni consente di eliminare automaticamente sia i file di registrazione che i loro metadati del database per le registrazioni più vecchie di un numero configurabile di giorni (predefinito: 10 giorni) utilizzando i timer systemd e i servizi.
Come funziona
- Un timer systemd attiva un servizio ogni giorno a mezzanotte.
- Il servizio rimuove prima i riferimenti ai metadati nel database delle registrazioni più vecchie.
- Il servizio quindi elimina i file di registrazione effettivi dal file system.
- Il periodo di conservazione è configurabile (predefinito: 10 giorni).
- Le registrazioni e i loro metadati eliminati sono rimossi permanentemente.
Casi di utilizzo
- Gestione dello spazio su disco: Prevenire l'ingrandimento del file system rimuovendo automaticamente le vecchie registrazioni.
- Conformità ai criteri di conservazione dei dati: Mantenere le politiche di conservazione specifiche dell'organizzazione per i record di chiamata.
- Ottimizzazione delle prestazioni: Mantenere il database snello migliora le prestazioni delle query.
Prerequisiti
- Accesso SSH al cluster NethServer 8 dove è in esecuzione NethVoice.
- Familiarità con i servizi utente systemd.
Istruzioni di configurazione
Passaggio 1: Accedere all'applicazione
Innanzitutto, connettersi a NethServer utilizzando SSH, quindi accedere all'ambiente container NethVoice:
runagent -m nethvoice1
Quindi navigare nella directory utente systemd:
cd ~/.config/systemd/user/
(Il percorso completo è /home/nethvoice1/.config/systemd/user/)
Passaggio 2: Creare il file del timer
Creare un file denominato recording-prune.timer con il seguente contenuto:
File: recording-prune.timer
[Unit]
Description=Daily timer to prune old call recordings
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
Questo file definisce un timer quotidiano che attiva il servizio di eliminazione ogni giorno. L'impostazione Persistent=true assicura che il timer venga eseguito anche se il sistema era spento all'ora pianificata.
Passaggio 3: Creare il file del servizio
Creare un file denominato recording-prune.service con il seguente contenuto:
File: recording-prune.service
[Unit]
Description=Prune old call recordings
Wants=recording-prune.timer
[Service]
Type=oneshot
Environment=PODMAN_SYSTEMD_UNIT=%n
EnvironmentFile=%S/state/passwords.env
WorkingDirectory=%S/state
Environment=DAYS=10
ExecStart=/bin/bash -c "podman exec -i mariadb mysql -uroot -p\"${MARIADB_ROOT_PASSWORD}\" asteriskcdrdb -e \"UPDATE asteriskcdrdb.cdr SET recordingfile = '' WHERE calldate < DATE_SUB(NOW(), INTERVAL ${DAYS} DAY) AND recordingfile != '';\""
ExecStart=podman exec -ti freepbx find /var/spool/asterisk/monitor/ -type f -mtime +${DAYS} -delete
La riga Environment=DAYS=10 imposta il periodo di conservazione su 10 giorni. È possibile modificare questo valore per cambiare quanti giorni di registrazioni conservare.
Nota: Il servizio utilizza due comandi ExecStart separati:
- Il primo comando aggiorna il database per cancellare i riferimenti ai file di registrazione.
- Il secondo comando elimina i file di registrazione effettivi dal disco.
Passaggio 4: Abilitare e avviare il timer
Abilitare il timer per l'avvio automatico al boot:
systemctl --user daemon-reload
systemctl --user enable --now recording-prune.timer
Fatto! Il servizio di eliminazione delle registrazioni è ora configurato per l'esecuzione una volta al giorno.
Procedure di backup e ripristino
Prima di fare affidamento sull'eliminazione automatica in produzione, è fortemente consigliato creare backup dei dati di registrazione.
Prima di eseguire qualsiasi comando, assicurarsi di essere nell'ambiente applicativo NethVoice:
runagent -m nethvoice1
Backup dei metadati delle registrazioni di chiamata
Per eseguire il backup dei metadati di registrazione di chiamata dalla tabella CDR:
export MARIADB_ROOT_PASSWORD="$(awk -F= '/^MARIADB_ROOT_PASSWORD=/{sub(/^[^=]*=/,""); print}' ~/.config/state/passwords.env)"
podman exec -ti mariadb mysqldump -p$MARIADB_ROOT_PASSWORD -uroot asteriskcdrdb cdr > cdr_backup.dump
Questo comando:
- Estrae la password root di MariaDB dal file
passwords.env. - Utilizza
mysqldumpper esportare la tabella CDR in un file denominatocdr_backup.dumpnell'ambiente host.
Backup dei file di registrazione
Per eseguire il backup dei file di registrazione effettivi:
podman exec freepbx tar -cz /var/spool/asterisk/monitor/ > recordings_backup.tar.gz
Ripristino dei metadati da un backup
Per ripristinare la tabella CDR da un backup:
podman cp cdr_backup.dump mariadb:/tmp
podman exec -ti mariadb /bin/bash -c "mysql -p$MARIADB_ROOT_PASSWORD -uroot asteriskcdrdb < /tmp/cdr_backup.dump"
Questo comando:
- Copia il file di backup nel container MariaDB.
- Ripristina i dati CDR dal backup utilizzando il comando
mysql.
Ripristino dei file di registrazione da un backup
Per ripristinare i file di registrazione effettivi:
podman cp recordings_backup.tar.gz freepbx:/tmp
podman exec -ti freepbx /bin/bash -c "tar -xz -C / -f /tmp/recordings_backup.tar.gz"
podman exec -ti freepbx chown -R asterisk:asterisk /var/spool/asterisk/monitor/
podman exec -ti freepbx rm /tmp/recordings_backup.tar.gz
Gestione e risoluzione dei problemi
Prima di eseguire qualsiasi comando, assicurarsi di essere nell'ambiente applicativo NethVoice:
runagent -m nethvoice1
Eseguire il servizio manualmente
Per testare il servizio di eliminazione manualmente:
systemctl --user start recording-prune.service
Controllare lo stato del timer
Per visualizzare il timer e la sua ultima esecuzione:
systemctl --user status recording-prune.timer
Visualizzare i log del servizio
Per vedere l'output del servizio di eliminazione:
api-server-logs logs --entity module --name nethvoice1
Questo visualizza i log per il modulo NethVoice. Cercare le voci relative al servizio di eliminazione delle registrazioni:
2026-01-20T13:51:42Z [1:nethvoice1:systemd] Starting Prune old call recordings...
2026-01-20T13:51:42Z [1:nethvoice1:systemd] Finished Prune old call recordings.
Regolare il periodo di conservazione
Per modificare il periodo di conservazione dai 10 giorni predefiniti:
- Modificare il file
recording-prune.service. - Individuare la riga:
Environment=DAYS=10 - Sostituire
10con il numero di giorni desiderato. - Salvare il file.
- Ricaricare il daemon utente systemd:
systemctl --user daemon-reload
Verificare l'eliminazione delle registrazioni
Per verificare che le registrazioni siano state eliminate, controllare la directory di registrazione:
ls -lah /var/spool/asterisk/monitor/
È inoltre possibile interrogare la tabella CDR per vedere quali registrazioni hanno riferimenti di file vuoti:
podman exec -ti mariadb mysql -uroot -p$MARIADB_ROOT_PASSWORD -e "SELECT COUNT(*) FROM asteriskcdrdb.cdr WHERE recordingfile = '' AND calldate < DATE_SUB(NOW(), INTERVAL 10 DAY);"
Disabilitare il servizio di eliminazione
Per disabilitare il timer e interrompere l'eliminazione automatica:
systemctl --user disable --now recording-prune.timer
Per rimuovere i file di servizio e timer:
rm ~/.config/systemd/user/recording-prune.service
rm ~/.config/systemd/user/recording-prune.timer
systemctl --user daemon-reload
Problemi comuni
Il timer non è in esecuzione:
- Verificare se il timer è abilitato:
systemctl --user list-timers - Verificare che i file di servizio si trovino nella posizione corretta:
ls -la ~/.config/systemd/user/recording-prune.* - Ricaricare il daemon utente systemd:
systemctl --user daemon-reload
Errori di connessione al database:
- Confermare che il container MariaDB è in esecuzione:
podman ps | grep mariadb - Testare manualmente la connessione MariaDB utilizzando le credenziali fornite.
I file non vengono eliminati:
- Verificare che il container FreePBX sia in esecuzione:
podman ps | grep freepbx - Controllare i permessi nella directory
/var/spool/asterisk/monitor/. - Assicurarsi che la variabile di ambiente
DAYScorrisponda al periodo di conservazione desiderato.
Riepilogo
Seguendo questa guida, avete:
- Creato file di servizio e timer dell'utente systemd per l'eliminazione automatica delle registrazioni di chiamate.
- Configurato il periodo di conservazione in base alle esigenze dell'organizzazione.
- Abilitato l'eliminazione giornaliera automatica delle vecchie registrazioni di chiamate.
- Appreso come eseguire il backup e il ripristino sicuro dei metadati di registrazione e dei file.
Il servizio di eliminazione delle registrazioni verrà ora eseguito una volta al giorno e rimuoverà le registrazioni più vecchie del periodo di conservazione configurato, aiutandovi a gestire lo spazio su disco e a mantenere le prestazioni del database.