O log não irá parar no arquivo de log após renomeá-lo / movê-lo ... como faço para pará-lo?

2

Acabamos de descobrir que o logrotate não está girando nosso log de firewall. Então, é até 12G de tamanho.

Eu preciso dividir o arquivo em partes menores e começar a girá-las manualmente para que as coisas voltem ao normal.

No entanto, antes de começar a dividir o firewall, preciso impedir que o firewall efetue login no arquivo de log atual do firewall e force-o a iniciar o registro em um novo arquivo vazio. Dessa forma, não estou tentando dividir ou girar um arquivo de log que ainda está crescendo constantemente.

Eu tentei simplesmente fazer isso:

mv firewall firewall.old
touch firewall

Eu esperava ver o novo arquivo de firewall vazio começar a crescer em tamanho, mas não ... o firewall.old ainda está logado.

Então eu tentei iniciar / parar o iptables. Nenhuma mudança. O firewall.old ainda é o arquivo de log.

Eu tentei movê-lo para outro diretório. Isso não ajudou.

Eu tentei parar o iptables, então mudei o nome do arquivo e criei um novo arquivo de firewall e então iniciei o iptables novamente, mas nenhuma mudança.

Como faço para parar o registro neste arquivo e forçá-lo a iniciar o login em um novo arquivo?

    
por Jake Wilson 12.04.2010 / 19:02

4 respostas

6

O iptables usa o recurso syslog para o registro. Envie um SIGHUP para o syslogd, ksyslogd ou rsyslogd para fechar e reabrir os arquivos de log.

    
por 12.04.2010 / 19:11
2

A gravação do arquivo de log não é executada pelo iptables. O iptables simplesmente registra na instalação do syslog do kernel e cabe ao seu programa syslog gravá-lo em um arquivo de log. Quando você está movendo o arquivo, você está basicamente renomeando-o da perspectiva do sistema de arquivos. Seu daemon syslog não tem idéia de que você fez isso e felizmente continua escrevendo para o seu filehandle aberto. O que você precisa fazer é recarregar seu daemon syslog para que ele reabra o arquivo com base em seu caminho do sistema de arquivos e comece a gravar no novo arquivo. A maioria dos daemons syslog suportam capturar o sinal HUP para fazer isso e não requerem uma reinicialização completa.

Você deve usar um programa como logrotate, que é pré-instalado com a maioria das distros, para lidar com a rotação para você. É inteligente e suporta ações como daemons de sinalização. Você não precisa criar seu próprio script para esse propósito.

    
por 12.04.2010 / 19:10
2

Seus arquivos de configuração para logrotate devem incluir uma seção pós-carga que recarregue ou syslog SIGHUPs ou rsyslog ou equivalente.

No meu sistema, /etc/logrotate.d/rsyslog contém, entre outras coisas:

    postrotate
            reload rsyslog >/dev/null 2>&1 || true
    endscript
    
por 12.04.2010 / 19:15
-2

Você pode fazer uma cópia do seu arquivo syslog:

cp -abf sys.log sys.log_bak

E mova a cópia para qualquer local desejado:

mv sys.log_bak /path/desired/sys.log_bak

E limpe o conteúdo do arquivo original:

cat /dev/null > sys.log

Seu arquivo original continuará a receber syslogs depois disso; você não precisa trocá-lo por outro arquivo.

    
por 28.09.2012 / 23:24