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 / 408936
Accepted
x-yuri
x-yuri
Asked: 2017-12-06 05:51:01 +0800 CST2017-12-06 05:51:01 +0800 CST 2017-12-06 05:51:01 +0800 CST

Por que `journalctl --list-boots` não corresponde ao relatório `uptime` e `who -b`?

  • 772

Aqui está um script de teste que usei:

last_reboot=$(last reboot | grep 'still running' | awk '{for (i=5; i<=NF; i++) printf $i FS}' | awk '{for (i=1; i<=NF - 2; i++) printf $i FS}')
if [ "$last_reboot" ]; then
    date -d "$last_reboot" '+last reboot: %Y-%m-%d'
fi

days=$(uptime | awk '{print $3}')
hours=$(uptime | awk '{print $5}' | sed -E 's/,$//')
h=$(echo "$hours" | cut -d: -f 1)
m=$(echo "$hours" | cut -d: -f 2)
date -d "- $days days - $h hours - $m minutes" '+uptime: %Y-%m-%d'

who -b | awk '{print "who: " $3}'

journalctl --list-boots | awk '$1 == "0" {print "journalctl: " $4}'

Localmente, todas as quatro datas coincidem.

Eu executei em cerca de 10 servidores. last rebootnão relata nada (provavelmente, porque wtmpé girado por logrotate). uptimee who -bcombinar. E journalctlnão. O que exatamente journalctl --list-bootsrelata? Por que não pode corresponder ao relatório de outras ferramentas?

systemd boot
  • 1 1 respostas
  • 6276 Views

1 respostas

  • Voted
  1. Best Answer
    JdeBP
    2017-12-06T13:08:12+08:002017-12-06T13:08:12+08:00

    Os novos logs binários nos sistemas operacionais Linux não funcionam da mesma forma que os antigos logs binários.

    Os logs binários antigos eram /var/log/wtmpe /var/log/btmp. Na inicialização do sistema, uma entrada seria gravada wtmpcom o nome de usuário reboote, no desligamento, uma entrada seria gravada wtmpcom o nome de usuário shutdown. Encontrar os horários em que o sistema foi reinicializado foi uma questão de usar os comandos last reboote last shutdownpara imprimir essas entradas.

    Os novos logs binários são o diário do systemd e não possuem essas entradas.

    Em vez disso, cada registro de diário possui um campo denominado boot ID . Você pode ver isso com a -o verboseopção de journalctl. Um ID de inicialização é gerado pelo kernel no bootstrap e systemd-journaldaplica o ID de inicialização atual, obtido do kernel, a cada registro de log à medida que o adiciona ao diário.

    Para implementar a list-bootsfuncionalidade, journalctlverifica todo o diário , lendo os carimbos de data/hora e IDs de inicialização de cada registro e anotando os carimbos de data/hora mais antigos e mais recentes associados a cada ID de inicialização exclusivo.

    Portanto, se partes do diário forem limpas ou, inversamente, permanecerem por muito tempo, os tempos aparentes de inicialização e desligamento relatados por journalctlserão muito diferentes dos tempos reais de inicialização e desligamento.

    /run/utmpé uma tabela de registros de login do terminal, com entradas especiais para inicialização e desligamento. Essas entradas são lidas por uptimee who -b. Eles são escritos por programas como systemd-update-utmp, um análogo do utxcomando FreeBSD, que são executados como parte dos procedimentos de inicialização e desligamento. Eles não são executados em primeiro ou último lugar, pois os serviços relevantes não são (e de fato não podem ser) solicitados absolutamente em primeiro ou último lugar. Pode haver entradas de diário com o ID de inicialização relevante que precedem a hora da systemd-update-utmp rebootexecução e entradas de diário semelhantes que systemd-update-utmp shutdownsão posteriores à hora da execução.

    Leitura adicional

    • https://unix.stackexchange.com/a/383575/5132
    • https://unix.stackexchange.com/a/294206/5132
    • 4

relate perguntas

  • Sistema intacto, grub quebrado

  • Use o suporte de watchdog do systemd para reiniciar o aplicativo

  • "pacman -Syu" 'provavelmente' quebrou meu sistema, porque a inicialização não foi montada

  • SSD clonado não inicializa e imprime linhas estranhas

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

Sidebar

Stats

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

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

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

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +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
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +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