Como alguém roda o log manualmente sem logrotate no arquivo open / live?

3

Meu Google-Fu está me deixando tão perto, mas não exatamente lá, e eu acho que sou muito verde no Linux para juntar as peças.

Eu tenho um arquivo de log muito grande > 200GB, ainda sendo gravado. Logrotate não vai chegar a tempo antes que o espaço em disco possa ser uma preocupação. Além disso, não quero disparar outra rodada de logrotate , porque não quero que isso afete todos os outros destinos em sua configuração. Eu adicionei a nova sub-rotina no meu arquivo logrotate.conf como tal:

/log/myDevice/myDevice.log {
  compress
  daily
  rotate 360
  maxage 360
  missingok
  compresscmd /usr/bin/xz
  dateext
  compressext .xz
  copytruncate
  olddir /log/archive/myDevice
}

Eu gostaria de fazer essas coisas manualmente:

  1. copytruncate: para extrair o arquivo de log atual, mas permitir que o syslog-ng continue navegando no arquivo aberto / ativo atual
  2. (não acima no logrotate.conf) split : para dividir o registro atual em pedaços menores
  3. xz : comprimir para a pasta de arquivamento

Eu posso split(1) e xz(1) bem, mas quando eu tento pegar o arquivo de destino, não há dados.

Eu tentei sudo mv myDevice.log ZmyDevice.log && touch myDevice.log , mas o syslog-ng apenas se move com o arquivo original (e seu novo nome) e mantém as gravações felizes. Que fez um pouco desde quando eu pensei sobre como o arquivo está sendo referenciado pelo syslog-ng.

Então, eu estou tentando descobrir como fazer algum tipo de manual copytruncate , a fim de cortar o arquivo para outro "no lugar", por assim dizer, e deixar syslog-ng continuar chugging em que quer.

    
por Ceafin 29.12.2014 / 19:32

2 respostas

2

Mova o arquivo e envie um SIGHUP para o processo syslog-ng:

kill -HUP

que fará com que ele reabra todos os arquivos abertos, liberando o arquivo que você acabou de mover / renomear e permitindo que você continue. Ele então abrirá o /log/myDevice/myDevice.log e começará a escrever para ele.

    
por 29.12.2014 / 19:44
0

Descubra quais processos têm o arquivo aberto: fuser /path/to/file . Em seguida, use kill -SIGSTOP para suspender o (s) processo (s) que está gravando no arquivo. Em seguida, gire o arquivo, copie-o, trunque-o, o que for necessário e retome o (s) processo (s) com kill -SIGCONT .

    
por 29.12.2014 / 23:45