Rotar un rexistro do vixía VPN sen romper o escritor
Decida primeiro o destino e logo faga que a rotación coincida con como o escritor abre o ficheiro: renomear para comprobacións breves, reabrir ou copytruncate para un daemon.
Unha comprobación de saúde VPN que engade unha liña por minuto crea en silencio un segundo deber: decidir como esas liñas saen do disco. Arranxar o túnel non fai nada por ese deber, e renomear o ficheiro non redirixe un proceso que aínda ten o descritor antigo. Responda primeiro a cuestión do destino e logo faga que a rotación coincida coa forma en que o escritor o abre.
Escolla o destino antes ca política de rotación
Unha unidade de systemd que xa envía a súa saída ao diario mantén a retención nun só lugar. journald aplica límites como SystemMaxUse e MaxRetentionSec , así que un vixía que rexistra alí herda un límite sen traballo adicional. Engadir un segundo ficheiro sen límite xunto a el duplica o mantemento sen ningunha ganancia.
Un ficheiro dedicado gáñase o seu sitio cando algo máis o le: un analizador, unha exportación de auditoría ou unha páxina que espera unha ruta estable. Unha vez tomada esa decisión, o ficheiro necesita un propietario, un modo e unha política de rotación escritos xuntos, porque os tres só son correctos como conxunto. Unha ruta que calquera pode crear tamén é unha ruta que calquera pode substituír, así que os permisos do directorio pertencen á mesma nota. Escriba todo iso xunto á comprobación e a próxima edición comezará desde os mesmos feitos.
Escriba o bloque para coincidir co escritor
Parta dun escritor que abre a ruta en cada invocación, engade unha liña e sae. Ese patrón sobrevive á rotación sen ningunha cooperación do proceso, porque a seguinte execución abre o ficheiro que agora está nesa ruta. O bloque de abaixo conserva unha semana de versións e volve crear o ficheiro co propietario e o modo que o escritor necesita:
/var/log/vpn-watchdog.log {
daily
rotate 7
create 0600 root root
missingok
notifempty
}
O manual de logrotate define a conta como o número de versións rotadas conservadas, non como unha garantía de sete días de historial, e a palabra clave daily avalíase cando se executa a tarefa en lugar de actuar como o seu propio planificador. Na maioría das distribucións un temporizador de systemd ou unha entrada de cron xa posúe esa invocación, así que comprobe cal existe antes de engadir unha segunda. Acertar coa propiedade importa máis que a conta de retención. Copiar un modo só para root nun ficheiro escrito por unha conta de servizo detén o rexistro na seguinte rotación, e o fallo aparece horas despois como unha marca de tempo obsoleta en lugar de como un erro. Confirme o usuario do escritor antes de copiar un bloque doutro sitio.
Un escritor que nunca reabre necesita outra solución
Un proceso de longa duración cun descritor aberto segue escribindo no inodo renomeado. O espazo non se libera e o ficheiro visible deixa de medrar, o que parece unha rotación rota ata que comprobe o inodo. Ou ensine ao proceso a reabrir, ou faga que a rotación copie e trunque en lugar de renomear.
A ruta de reapertura é a máis limpa onde o software a admite: envía o sinal documentado ou execute o comando documentado, e deixe que o proceso abra el mesmo o ficheiro novo. A alternativa é copytruncate , que copia o contido ao nome rotado e logo trunca o orixinal no seu sitio, de modo que o descritor segue sendo válido pero as escrituras que caen entre a copia e o truncado pérdense.
Para unidades iniciadas por systemd, apunte StandardOutput ao diario ou a un ficheiro e deixe que a unidade posúa o ciclo de vida. Un bucle de shell que engade mediante tee -a sen límite de tamaño é a disposición que enche unha partición durante unha avaría, porque unha comprobación fallida adoita rexistrar moito máis que unha sana.
Probe a rotación sen esperar o temporizador
O modo de depuración informa do que ocorrería e non toca nada, o que o converte na primeira execución segura despois dunha edición. Force unha rotación real cando estea satisfeito e logo confirme que a seguinte liña do rexistro cae no ficheiro novo e non no renomeado:
logrotate -d /etc/logrotate.d/vpn-watchdog logrotate -f /etc/logrotate.d/vpn-watchdog ls -l /var/log/vpn-watchdog.log* tail -n 3 /var/log/vpn-watchdog.log df -h /var/log
Lea a saída nesa orde. A pasada de depuración debería nomear o ficheiro e as accións que pretende; unha execución forzada debería producir o nome rotado que esperaba; a cola debería mostrar unha entrada nova despois de que o escritor volva executarse. Un valor de df crecente cun ficheiro visible que encolle significa o problema de descritor descrito arriba.
Repita a execución forzada dúas veces para ver como se comporta a retención cando xa existen versións. Borrar o ficheiro máis antigo é o resultado esperado, e unha eliminación ausente adoita significar que a conta ou o comodín do nome rotado non coinciden co que logrotate creou.
Garde unha reversión e un rexistro escrito
Garde o bloque anterior antes de editar e anote que planificador o executa, porque unha reversión que restaura o ficheiro pero non o temporizador reproduce a metade do problema orixinal. Rote unha vez a man tras restaurar e logo confirme que a conta do escritor pode escribir na ruta do rexistro. Se o servizo se executa baixo systemd, recargue a unidade despois de calquera cambio na redirección da súa saída, xa que o proceso en marcha segue escribindo ao obxectivo antigo. Lea vostede mesmo as seguintes liñas do rexistro en lugar de confiar en que a unidade volveu limpa.
Rexistre o modo, o propietario, a conta de retención e o orzamento de disco esperado xunto á propia comprobación. Cando máis adiante a comprobación pase dun script dunha soa vez a un daemon, a política de rotación ten que cambiar con ela, e esa nota é a que lle di á seguinte persoa que suposición se rompeu.
Por último, manteña a decisión do rexistro separada da decisión de recuperación. Unha sonda fallida debe seguir a política de recuperación da propia conexión, non unha regra escondida dentro de logrotate, e ningunha disposición de rexistro debería ser a razón para reiniciar un túnel que funciona.