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 / 562611
Accepted
mike rodent
mike rodent
Asked: 2020-01-18 04:27:51 +0800 CST2020-01-18 04:27:51 +0800 CST 2020-01-18 04:27:51 +0800 CST

Como o logrotate funciona?

  • 772

Estou realmente lutando para entender como logrotatefunciona ao executar um comando dentro de um arquivo shell próprio e como isso não acontece.

O comando em questão é:

rclone -L -vv --log-file "/home/mike/tmp/qqq.log"  sync "/media/mike/W10 D drive/My Documents/"  remote:MyDocuments_M17A_from_Linux

O que eu gostaria:

Eu gostaria que este arquivo qqq.log fosse verificado com bastante frequência, digamos a cada 10 min., para ver se ele excedeu um determinado tamanho, digamos 1 MB. E se tiver, para girar o arquivo. rclonecom a -vvopção produz uma saída copiosa, deliberadamente (ou seja, tentar entender para obter logrotate funcionando para este caso de uso).

Há um tutorial moderadamente útil aqui , mas ainda me deixa no escuro:

  1. Como você pretende configurar a rotação de logs de seus próprios processos que não são do sistema? Você pretende colar linhas na parte inferior de /etc/logrotate.conf? Isto é o que eu fiz (em "# logs específicos do sistema podem ser configurados aqui"):

    /home/mike/tmp/qqq.log {
      notifempty
      size 1M
      daily
      create 0664 root root
      rotate 3
    }
    

    mais tarde: agora percebo que você também pode colocar arquivos individuais /etc/logrotate.d- sem grande complexidade lá.

  2. Será que por padrão logrotatesó roda uma vez por dia, em virtude do arquivo /etc/cron.daily/logrotate?

  3. Isso significa que, se eu quiser uma verificação muito mais frequente, talvez deva configurar um crontrabalho para fazer isso, executando (neste exemplo) a cada 10 minutos?

  4. Você está destinado a executar logrotate <config file>como root? Faço esta pergunta porque tentei tanto como root quanto como usuário. O usuário não parecia funcionar.

Um link para um guia para iniciantes para esse tipo de configuração, que não pode ser tão incomum, seria útil. Eu pesquisei, mas a maior parte do que encontrei não fornece um guia passo a passo.

logs logrotate
  • 2 2 respostas
  • 4896 Views

2 respostas

  • Voted
  1. Best Answer
    roaima
    2020-01-18T05:20:44+08:002020-01-18T05:20:44+08:00

    logrotatepode ser executado como um usuário comum, sem privilégios administrativos, para alternar os logs desse usuário.

    # Create a local per-user configuration file
    cat >.logrotate.conf <<'X'
    /home/mike/tmp/qqq.log {
        notifempty
        missingok
        size 1M
        rotate 3
    }
    X
    
    # Run logrotate with that configuration file
    /usr/sbin/logrotate -v -s .logrotate.state .logrotate.conf
    

    Eu removi seu dailycritério porque você queria apenas uma verificação baseada em tamanho, e isso limitaria qualquer ação possível a apenas uma vez por dia (a primeira vez a cada dia que logrotateé executada, conforme acontece). Substituí createpor missingokpara que seja seu rclonetrabalho real criar o arquivo de saída em vez de logrotate.

    Em seguida, coloque o logrotatecomando no crontabarquivo do seu usuário:

    # Capture any existing crontab entries
    crontab -l >.crontab
    
    # Append ours to the list
    echo '0 * * * * /usr/sbin/logrotate -s .logrotate.state .logrotate.conf >>.crontab.log 2>&1' >>.crontab
    
    # Reload crontab
    crontab .crontab
    

    Usando este exemplo, a saída do comando será gravada em .crontab.log, e você provavelmente desejará que uma logrotateentrada seja alternada ou redefinida mensalmente.

    • 9
  2. X Tian
    2020-01-18T05:19:04+08:002020-01-18T05:19:04+08:00

    Como você está produzindo seus próprios arquivos de log e requer um corte de tamanho mais em tempo real, você deve dar uma olhada no utilitário Rotalogs do Apache aqui .

    Ele funciona lendo stdin e corta o arquivo de log com base nos argumentos da linha de comando.

    por exemplo.

    program-writing-to-stdout|/bin/rotatelogs /home/mike/tmp/qqq.log 1M"
    

    O logrotate , por outro lado, verifica os arquivos de log quando é executado, e geralmente os sistemas são configurados para executar o logrotate (via cron) uma vez por dia. A configuração dos subsistemas geralmente é feita soltando o arquivo de configuração /etc/logrotate.de sim, geralmente é executado como root.

    Edit: @mike roedor

    logrotate é executado (pelo cron ou manualmente) e, em seguida, verifica as estatísticas do arquivo de log como visto no sistema de arquivos, então aciona uma rotação dependendo de sua configuração.

    rotatelogslê sua entrada padrão continuamente anexando a um arquivo de log, então, quando o tempo ou o tamanho do arquivo de log atinge um ponto de disparo, ele fecha o arquivo de log atual, cria um novo arquivo de log (com o nome apropriado) e continua a anexar ao novo arquivo de log.

    Isso tem uma influência sobre como você inicia o programa que gera a saída, ele precisa gravar na saída padrão e, em seguida, você canaliza isso em rotalogs.

    por exemplo

    while true ; do date ; sleep 30 ; done | rotatelogs -n 10 /home/mike/tmp/qqq.log 60
    

    Irá dar-lhe uma rotação circular através de 10 limas, cortadas a cada 60 segundos

    Usando rclone, eu esperaria --log-file "/dev/stdout"que ele gravasse na saída padrão.

    [editar 2] @mike roedor

    Eu não estou familiarizado com o rclone, se ele grava em stdout ou stderr e se alguma coisa ele grava, mas existem maneiras de contornar isso, mesmo --log-file=/dev/stdoutque não funcione.

    Este StackOverflow Q/Answer , entre outros, explica o redirecionamento e a tubulação. Mas, para resumir, é possível redirecionar apenas stderr ou mesclado com stdout em um pipe.

    Exemplo de bash:

    Mesclar stderr com stdout no pipe

    FirstCommand 2>&1 | OtherCommand
    

    Apenas stderr em pipe, stdout em otherfile (que pode ser /dev/null ou até mesmo um hífen -que fecha stdout).

    FirstCommand 2>&1 1>otherfile.log | otherCommand
    

    Esses exemplos usam a sintaxe bash mais antiga, o bash v4 tem uma variante moderna menos detalhada.

    • 4

relate perguntas

  • Usando sed para limpar caminhos longos em arquivos de log

  • O descritor logrotate pode lidar com vários curingas?

  • systemd: como redirecionar stdout para logfile

  • Níveis diferenciadores no journalctl

  • Por que o logrotate não é girado automaticamente?

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