Passa al contenuto principale

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 mysqldump per esportare la tabella CDR in un file denominato cdr_backup.dump nell'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:

  1. Modificare il file recording-prune.service.
  2. Individuare la riga: Environment=DAYS=10
  3. Sostituire 10 con il numero di giorni desiderato.
  4. Salvare il file.
  5. 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 DAYS corrisponda 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.

NethVoice 8.0