Como obtenho a hora em que o sistema inicializou no formato de época?

1

Eu preciso escrever um script que descubra se uma reinicialização ocorreu após a instalação de um RPM. É muito fácil obter o tempo de época para quando o RPM foi instalado: rpm -q --queryformat "%{INSTALLTIME}\n" glibc | head -1 , que produz uma saída assim: 1423807455 .

Esta verificação cruzada com rpm -q --info .

# date -d@'rpm -q --queryformat "%{INSTALLTIME}\n" glibc | head -1'
Fri Feb 13 01:04:15 EST 2015
# sudo rpm -q --info glibc | grep "Install Date" | head -1
Install Date: Fri 13 Feb 2015 01:04:15 AM EST      Build Host: x86-022.build.eng.bos.redhat.com

Mas estou ficando confuso ao tentar descobrir como obter o tempo de época de uptime ou cat /proc/uptime . Eu não entendo a saída de cat /proc/uptime que no meu sistema se parece com isso: 19496864.99 18606757.86 . Por que existem dois valores? Qual devo usar e por que esses números têm um decimal neles?

ATUALIZAÇÃO: obrigado techraf

aqui está o script que eu usarei ...

#!/bin/sh

now='date +'%s''
rpm_install_date_epoch='rpm -q --queryformat "%{INSTALLTIME}\n" glibc | head -1'
installed_seconds_ago='expr $now - $rpm_install_date_epoch'
uptime_epoch='cat /proc/uptime | cut -f1 -d'.''

if [ $installed_seconds_ago -gt $uptime_epoch ]
then
        echo "no need to reboot"
else
        echo "need to reboot"
fi

Eu apreciaria qualquer feedback sobre o roteiro.

Obrigado

    
por Red Cricket 24.03.2016 / 22:38

2 respostas

3

Como manuais (e até Wikipedia ):

/proc/uptime

Shows how long the system has been on since it was last restarted.

The first number is the total number of seconds the system has been up. The second number is how much of that time the machine has spent idle, in seconds. On multi core systems (and some linux versions) the second number is the sum of the idle time accumulated by each CPU.

O ponto decimal separa segundos de frações de segundo. Para calcular o sistema de ponto no tempo inicializado usando essas métricas, você teria que subtrair o número de segundos em que o sistema esteve ativo (primeiro número) da hora atual no formato de época, arredondando a fração.

    
por 24.03.2016 / 23:31
0

Como o tuptime tem a opção de imprimir sua saída em segundos e épocas, você pode obtê-lo a partir dele.

Na linha Current uptime: , ele informa o tempo de atividade real e a hora em que o sistema foi inicializado:

$ tuptime | grep 'Current uptime'
Current uptime:     59 minutes and 27 seconds   since   08:08:32 09/06/18

Portanto, com os argumentos -s seconds e -c csv com alguns canais de linha de comando:

$ tuptime -sc | grep 'Current uptime' | awk -F\" '{print $8}'
1528524512
    
por 09.06.2018 / 09:10