Eliminare i vecchi messaggi di posta vocale
Come eliminare automaticamente i messaggi di posta vocale più vecchi di un numero specificato di giorni su NethVoice
Obiettivo della guida
Lo scopo di questa guida è spiegare come configurare l'eliminazione automatica della posta vocale su NethVoice e descrivere la configurazione, il funzionamento e le procedure di backup dei dati per garantire un'eliminazione sicura dei vecchi messaggi.
Introduzione
NethVoice archivia i messaggi di posta vocale in un database MariaDB. Nel corso del tempo, questo database può crescere in modo significativo, consumando spazio su disco. La funzionalità di eliminazione della posta vocale consente di eliminare automaticamente i messaggi di posta vocale più vecchi 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 esegue una query MariaDB che elimina i messaggi di posta vocale più vecchi del periodo di conservazione configurato.
- Il periodo di conservazione è configurabile (predefinito: 10 giorni).
- I messaggi eliminati sono rimossi permanentemente dal database.
Casi di utilizzo
- Gestione dello spazio su disco: Prevenire l'ingrandimento del database rimuovendo automaticamente i messaggi precedenti.
- Conformità ai criteri di conservazione dei dati: Mantenere le politiche di conservazione specifiche dell'organizzazione.
- 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 voicemail-prune.timer con il seguente contenuto:
File: voicemail-prune.timer
[Unit]
Description=Daily timer to prune old voicemails
[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 voicemail-prune.service con il seguente contenuto:
File: voicemail-prune.service
[Unit]
Description=Prune old voicemail messages
Wants=voicemail-prune.timer
[Service]
Type=oneshot
Environment=PODMAN_SYSTEMD_UNIT=%n
EnvironmentFile=%S/state/passwords.env
WorkingDirectory=%S/state
Environment=DAYS=10
ExecStart=podman exec -i mariadb mysql -uroot -p"${MARIADB_ROOT_PASSWORD}" asteriskcdrdb -e "DELETE FROM voicemessages WHERE msgnum <> -1 AND CAST(origtime AS UNSIGNED) < (UNIX_TIMESTAMP() - ${DAYS}*24*60*60); OPTIMIZE TABLE voicemessages;"
La riga Environment=DAYS=10 imposta il periodo di conservazione su 10 giorni. È possibile modificare questo valore per cambiare quanti giorni di posta vocale conservare.
Passaggio 4: Abilitare e avviare il timer
Abilitare il timer per l'avvio automatico al boot:
systemctl --user daemon-reload
systemctl --user enable --now voicemail-prune.timer
Fatto! Il servizio di eliminazione della posta vocale è 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 un backup dei dati di posta vocale.
Prima di eseguire qualsiasi comando, assicurarsi di essere nell'ambiente applicativo NethVoice:
runagent -m nethvoice1
Creazione di un backup
Per eseguire il backup della tabella voicemessages:
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 voicemessages > backup.dump
Questo comando:
- Estrae la password root di MariaDB dal file
passwords.env. - Utilizza
mysqldumpper esportare la tabellavoicemessagesin un file denominatobackup.dumpnell'ambiente host.
Ripristino da un backup
Per ripristinare la tabella voicemessages da un backup:
podman cp backup.dump mariadb:/tmp
podman exec -ti mariadb /bin/bash -c "mysql -p$MARIADB_ROOT_PASSWORD -uroot asteriskcdrdb < /tmp/backup.dump"
podman exec -ti mariadb rm /tmp/backup.dump
Questo comando:
- Copia il file di backup nel container MariaDB.
- Ripristina i dati dal backup utilizzando il comando
mysql.
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 voicemail-prune.service
Controllare lo stato del timer
Per visualizzare il timer e la sua ultima esecuzione:
systemctl --user status voicemail-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 della posta vocale:
2026-01-20T13:51:42Z [1:nethvoice1:systemd] Starting Prune old voicemail messages...
2026-01-20T13:51:42Z [1:nethvoice1:systemd] Finished Prune old voicemail messages.
Regolare il periodo di conservazione
Per modificare il periodo di conservazione dai 10 giorni predefiniti:
- Modificare il file
voicemail-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
Disabilitare il servizio di eliminazione
Per disabilitare il timer e interrompere l'eliminazione automatica:
systemctl --user disable --now voicemail-prune.timer
Per rimuovere i file di servizio e timer:
rm ~/.config/systemd/user/voicemail-prune.service
rm ~/.config/systemd/user/voicemail-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/voicemail-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.