AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 717076
Accepted
Gabriel Staples
Gabriel Staples
Asked: 2022-09-13 16:57:35 +0800 CST2022-09-13 16:57:35 +0800 CST 2022-09-13 16:57:35 +0800 CST

Buildroot: syslog-ng faz login no arquivo "/var/log/messages.1" em vez de "/var/log/messages"

  • 772

Estou construindo uma placa Linux embarcada com Buildroot ( manual do usuário aqui ).

Eu tenho syslog-ngcorrendo na placa. Seu arquivo de configuração é especificado em buildroot aqui: https://github.com/buildroot/buildroot/blob/master/package/syslog-ng/syslog-ng.conf :

@version: 3.37

source s_sys {
    file("/proc/kmsg" program_override("kernel"));
    unix-stream ("/dev/log");
    internal();
};

destination d_all {
    file("/var/log/messages");
};

log {
    source(s_sys);
    destination(d_all);
};

Observe que ele especifica o destino como "/var/log/messages", mas o log ativo no quadro está entrando em um arquivo chamado /var/log/messages.1, e o /var/log/messagesarquivo nem existe. Por que é que? Existe uma maneira de fazer login no /var/log/messagesarquivo em vez disso?

O Syslog, que costumávamos usar, faz login no /var/log/messages, e estamos tentando manter esse comportamento para consistência.

Notas Adicionais

  1. ls -1 /var/logem uma placa em execução syslogcontém estes messagesarquivos:
    messages
    messages.1
    messages.2
    messages.2.gz
    messages.3
    messages.4
    messages.5
    messages.6
    messages.7
    
  2. ls -1 /var/logem uma placa em execução syslog-ngcontém esses messagesarquivos ( messagesfalta o aviso):
    messages.1
    messages.2
    messages.3
    messages.4
    messages.5
    messages.6
    messages.7
    
  3. Na syslog-ngplaca, tail -f /var/log/messages.1mostra que está continuamente recebendo mensagens registradas, o que é inesperado, pois ao usar syslogo arquivo "ativo" é /var/log/messagesem vez disso.
linux embedded
  • 1 1 respostas
  • 47 Views

1 respostas

  • Voted
  1. Best Answer
    Gabriel Staples
    2022-09-13T21:52:51+08:002022-09-13T21:52:51+08:00

    Resolvido! Você deve forçar syslog-nga reabertura de seus arquivos de log de destino após cada rotação de log

    Então, eu percebi. Obrigado a @Murray Jensen pela dica aqui .

    Sempre que logrotategira meu /var/log/messagesarquivo, ele o renomeia para /var/log/messages.1. No entanto, syslog-ngestá gravando no arquivo apontado pelo descritor de arquivo original (fd) que ele abriu. Renomear o arquivo de /var/log/messagespara /var/log/messages.1não altera o descritor de arquivo, portanto, o descritor de arquivo syslog-ng agora está gravando em pontos para o arquivo agora chamado /var/log/messages.1. A correção é simplesmente forçar syslog-nga reabertura de seus arquivos de log e obter novos descritores de arquivo após cada rotação de log, fazendo com que ele obtenha um novo descritor de arquivo para o arquivo de log de destino recém-criado que agora existe em /var/log/messages.

    Existem 3 maneiras de fazer isso, sobre as quais escrevi aqui: https://github.com/syslog-ng/syslog-ng/issues/1774#issuecomment-1270517815

    Veja aqui onde aprendi sobre syslog-ng-ctl reopen, que é a maneira recomendada: https://github.com/syslog-ng/syslog-ng/issues/1774#issuecomment-346624252

    As 3 formas são:

    # Option 0 (no longer recommended): call the heavier `reload` command after log
    # rotation
    syslog-ng-ctl reload
    
    # Option 1 (RECOMMENDED): call the new `reopen` command after log rotation
    syslog-ng-ctl reopen
    
    # Option 2 (same thing as Option 1 above): send the `SIGUSR1` kill signal to the
    # running `syslog-ng` process
    pid="$(cat /var/run/syslog-ng.pid)" kill -SIGUSR1 $pid
    

    Portanto, para forçar logrotatea chamada de uma das 3 maneiras acima automaticamente após cada rotação de log, você deve adicionar o comando apropriado como um postrotatescript dentro do seu arquivo de configuração /etc/logrotate.d/syslog-ng(ou similar - pode ser nomeado qualquer coisa) . logrotateAqui está a aparência de um arquivo de configuração logrotate fixo agora:

    Das minhas notas aqui:

    Exemplo de arquivo de configuração /etc/logrotate.d/syslog-ng logrotate :

    /var/log/auth.log 
    /var/log/user.log
    /var/log/messages  
    {
        rotate 7
        size 20M
        delaycompress
        missingok
        # Required for syslog-ng after each rotation, to cause it to reopen log
        # files so it can begin logging to the new log file under a new file
        # descriptor, rather than to the old log file which has now been rotated
        # and renamed. 
        postrotate
            # After rotating the log files, cause syslog-ng to reopen the
            # destination log files so it will log into the newly-created log files
            # rather than into the now-rotated and renamed ones.
            #
            # This ensures, for example, that syslog-ng will move its file
            # descriptor to begin logging into the main "/var/log/messages" log
            # file again, instead of into the now-rotated "/var/log/messages.1"
            # file, which the old file descriptor (fd) is now pointing to since
            # that fd's filename was just renamed from "/var/log/messages"
            # to "/var/log/messages.1" during the log rotation.
    
            # Option 1:
            syslog-ng-ctl reopen
            # OR, Option 2
            # pid="$(cat /var/run/syslog-ng.pid)" kill -SIGUSR1 $pid
        endscript
    }
    

    Observação: também abri uma solicitação de alteração de documentação aqui: https://github.com/syslog-ng/syslog-ng/issues/4166 . Agora é recomendado usar syslog-ng-ctl reopenapós cada rotação de log em vez de syslog-ng-ctl reload.

    Tentativa antiga de resposta (o que tentei primeiro)

    Na placa em execução syslog-ng, reflash a imagem rootfs (root filesystem) inteiramente e reiniciei a placa , e agora vejo o /var/log/messagesarquivo novamente:

    Parte da saída de ls -1 /var/log:

    messages
    messages.1
    messages.2
    messages.3
    messages.4
    messages.5
    messages.6
    messages.7
    

    Eu não posso explicar isso. tail -f /var/log/messagesrealmente mostra logs ativos entrando nesse arquivo, conforme o esperado, e tail -f /var/log/messages.1mostra que o arquivo é estático, sem novas mensagens chegando, também conforme o esperado.

    Eu posso provar que esta placa está realmente funcionando syslog-ngobservando a saída de ps aux | grep syslog:

    # ps aux | grep syslog
      803 root      0:00 {syslog-ng} supervising syslog-ng
      804 root      0:02 /usr/sbin/syslog-ng
    12571 root      0:00 grep syslog
    

    ...em oposição à saída desse mesmo comando quando executado na syslogplaca:

    # ps aux | grep syslog
      789 root      0:19 /sbin/syslogd -n -n -s 0
     2993 root      0:00 grep syslog
    

    Mais uma vez, não tenho certeza do que aconteceu, nem por quê.

    Em ambas as placas, ps aux | grep logrotatemostra que logrotateestá em execução. Ex:

    # ps aux | grep logrotate
     1299 root      0:00 runsv logrotate-periodically
    14208 root      0:00 grep logrotate
    

    Ambas as placas possuem o mesmo /etc/logrotate.confarquivo, e somente a syslog-ngplaca possui o /etc/syslog-ng.confarquivo, que contém o conteúdo conforme mostrado na pergunta.

    Se eu descobrir algo novo nos próximos dias, voltarei e atualizarei esta resposta.

    • 0

relate perguntas

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

  • Acesse o sistema de arquivos como usuário root

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve