De acordo com esta resposta , os arquivos de concessão DHCPd são limpos a cada hora. O objetivo é fazer backup do arquivo de concessões continuamente, para que nunca haja perda de uma concessão. Isso é dificultado, pois não está claro se o temporizador de horas é baseado no horário do sistema (por exemplo, o arquivo é reescrito às 1h, 2h, 3h etc.) ou no tempo de processo (service_start + 1h, service_start + 2h, etc). Digamos que o arquivo de concessões seja limpo exatamente às 3h e uma concessão seja concedida às 2h58:55; o serviço que faz backup do arquivo de concessão precisaria ser executado rapidamente antes que o arquivo fosse limpo.
O processo DHCPd faz seu próprio backup do arquivo para /var/lib/dhcpd/dhcpd.leases~
. A melhor aposta parece ser fazer um script que faça backup desse arquivo em outro local a cada hora. Mas se o processo DHCPd for reiniciado e o cronômetro for relativo ao processo, seria possível alinhar a marca de hora nas tarefas de backup, o que pode terminar em um processo lendo enquanto o outro grava, e isso pode danificar o arquivo ( dependendo de como é feito). Portanto, a tarefa de backup precisaria de algum conhecimento de quando o DHCPd é iniciado. Isso está ficando complicado.
Qual é a maneira 'correta' de fazer backup do arquivo de concessões DHCPd, para que nenhuma concessão seja perdida?
De fontes DHCP :
O arquivo de backup anterior é excluído e, em seguida, o arquivo de concessão atual é vinculado como backup com um arquivo
~
.No Linux, com o recurso de evento inotify(7) , um hardlink é visto como um evento de criação.
Sugiro usar
inotifywait
(doinotify-tools
pacote) para sinalizar quando tal evento aconteceu. Deve-se esperar que a aparição/var/lib/dhcpd/dhcpd.leases~
esteja diretamente pronta para backup (é um hardlink para o original). Como o arquivo será um arquivo diferente (inode diferente) a cada vez, é o diretório que deve ser observado para detecção adequada e, por exemplo, a--include
opção pode ser usada para simplificar o processamento do shell (sem processamento, mesmo a linha de leitura é descartada em um variável fictícia):Se o comando não for recente o suficiente, pode não entender
--include
nesse caso, o teste deve ser feito no loop de eventos:Como alternativa, o
incron
pacote (disponível pelo menos no CentOS 8 Stream) pode ser usado com uma entrada semelhante a:sendo
if_correct_file_do_backup
, por exemplo, um shell verificando este era o nome do arquivo pretendido: