Por que o kill -HUP é usado no logrotate no RHEL? É necessário em todos os casos?

0

Eu vejo para o log do syslog, kill -HUP é usado.

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
        /bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null' 2> /dev/null || true
    endscript
}

Eu entendi que -HUP é usado porque daemons como o syslog, quando eles pegam o SIGHUP, tentarão se reiniciar e assim todos os arquivos abertos serão atualizados.

Eu não entendo por que eles precisam ser atualizados.

Se o syslog fizer apenas o acréscimo de novo log aos arquivos de log, os arquivos abertos estarão no modo de gravação. Se for esse o caso, quando a comutação de logs ocorrer e em algum momento quando a entrada do arquivo de log antigo no sistema de arquivos for removida, não estará criando um novo arquivo automaticamente quando precisar anexar uma nova linha de registro (como todo syslog serviço está sendo executado como root)?

Eu acho que a diferença é mais no entendimento dos modos w e u. Eu não consigo chegar a uma conclusão rápida sobre isso.

Além disso, por que usar somente kill -HUP, por que não reiniciar o serviço. Haverá alguma diferença?

    
por GP92 25.04.2018 / 16:43

2 respostas

2

Geralmente, os serviços mantêm os arquivos de log abertos enquanto estão em execução. Isso significa que eles não se importam se os arquivos de log forem renomeados / movidos ou excluídos, eles continuarão a gravar no arquivo aberto tratado.

Quando o logrotate move os arquivos, os serviços continuam gravando no mesmo arquivo.

Exemplo: o crond irá gravar em /var/log/cron.log. Então logrotate irá renomear o arquivo para /var/log/cron.log.1, então o crond continuará escrevendo para o arquivo aberto /var/log/cron.log.1.

Enviar o sinal HUP para o crond o forçará a fechar o identificador de arquivo existente e abrir o novo identificador de arquivo ao caminho original /var/log/cron.log, que criará um novo arquivo.

O uso do sinal HUP em vez de outro fica a critério do programa. Alguns serviços, como o php-fpm, irão escutar o sinal USR1 para reabrir o seu identificador de arquivos sem terminar.

    
por 25.04.2018 / 17:16
0

Quando você move um arquivo, os programas que tinham esse arquivo aberto ainda têm o mesmo arquivo aberto no novo local e continuariam anexando ao antigo arquivo de log. O kill -HUP não necessariamente o faz reiniciar (por exemplo, para o syslog, mas para por exemplo um daemon do cron que gerencia seus próprios logs, ele simplesmente controla o próprio arquivo de log), mas pode simplesmente fazer com que ele feche o arquivo e abra o arquivo por nome , que é a parte importante deste script. Fazer um reinício difícil do syslogd também significaria que o serviço syslog não está disponível enquanto a reinicialização está acontecendo, enquanto o uso de um sinal que o syslogd sabe como manipular, permite fazer o que for necessário para que o "restart" seja transparente.

    
por 25.04.2018 / 17:05