Sei que uptime
imprime o tempo em que uma máquina está em funcionamento, mas existe uma maneira mais fácil (confiável) de obter a data de início do que a contagem regressiva dessa saída?
Tentei olhar em volta /proc
, mas não encontrei nada relevante. Há também uma linha como esta no meu dmesg
:
[ 0.673492] rtc_cmos rtc_cmos: setting system clock to 2011-03-14 14:26:52 UTC (1300112812)
Mas eu estou querendo saber se este método é independente da distribuição e da versão do kernel?
unreliable or hard
sobreuptime
?uptime
retorna uma sequência como "até 13 dias, 21:01" e você precisa contar a partir disso./proc/uptime
.Respostas:
Encontrei alguns comandos aqui . Tente
who -b
oulast reboot | head -1
.who
fornece datas numéricas, enquantolast reboot
retorna nomes abreviados de dia / mês.fonte
who -b | cut -d' ' -f13
Retorna a data única (-f14 retornos tempo)last reboot
não me deu a data correta!who -b
fez.last reboot
me deu uma data incorreta também, wtmp parecia ter sido girado primeiro dia do mêsIsso consulta o tempo de atividade do kernel e o exibe no fuso horário local:
Tenha cuidado com outras opções. O
last
comando irá parar de funcionar assim quewtmp
for girado. Owho
comando depende da disponibilidade e integridade deutmp
. E/proc/1
pode ter a data atual em vez da data da hora de inicialização e pode até estar indisponível em um sistema reforçado. Edit :dmesg
possui apenas um buffer traseiro de comprimento fixo, por isso também é irrealizável. Os logs do kernel podem estar,/var/log
mas a maioria das distribuições mantém apenas 8 semanas deles.fonte
who -b
de um ou dois minutos no meu sistema de 210 dias de atividade. Parece quewho -b
relata um carimbo de data / hora, enquanto essa contagem é de alguma forma afetada pelos desvios do relógio, mesmo que sejam periodicamente corrigidos por uma corridantpd
.date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u
(que tem data / hora em UTC)Eu me deparei com essa questão enquanto procurava uma maneira de obter um tempo de inicialização consistente e analisável , em vez do tempo desde a inicialização, que muda a cada chamada.
Parece que
uptime -s
fará o truque na maioria dos sistemas Linux.fonte
uptime -s
saídas por exemplo2017-08-09 01:23:45
. Isso é melhor, sendo mais simples. Este comando está incluído no pacote "procps".uptime
no CentOS 6 (procps version 3.2.8
) não parece apoiar esta, infelizmente.uptime -s
nem sempre retorna resultados constantes: superuser.com/q/1247713/71144Eu encontrei a
btime
linha/proc/stat
quando bisbilhotando um poucoe após uma pesquisa rápida, encontrei esta página: / proc / stat explicada , que descreve as "Várias informações sobre a atividade do kernel disponíveis no
/proc/stat
arquivo".fonte
awk '/btime/{print $2}' /proc/stat
uptime -s
,who -b
ou análise/proc/uptime
ls -ld /proc/1
e variantes.Não use ls -ld / proc / 1 para esse fim. Às vezes, é atualizado após s2disk ou s2ram.
No meu caso,
who -b
disse:inicialização do sistema 2 de maio 09:51
Enquanto
ls -ld /proc/1
:dr-xr-xr-x 7 raiz raiz 0 3 de maio 13:09 / proc / 1
ls -ld
para/proc
ou/sys
parece persistir após a retomada, mas depende da implementação e pode mudar no futuro, portanto, não use esses métodos. E se o relógio do sistema estiver no horário local , não no UTC , eles terão um deslocamento negativo.(Ainda não tenho o privilégio de comentar as respostas, abri uma nova resposta. Desculpe.)
EDIT:
uptime -s
foi respondido pela primeira vez nesta resposta por mikegreilingfonte
A maneira mais simples é ver quando o / sbin / init foi iniciado (esse é sempre o primeiro processo a ser iniciado após o carregamento do kernel):
Para que eu possa ver que minha máquina foi inicializada às 6 minutos da meia-noite de 27 de março de 2011.
Se você quiser usá-lo em scripts, poderá usar o
stat
comando:Os
%Y
especifica o tempo desde que o diretório foi modificado pela última vez (hora de criação do processo) em segundos desde a época (1/1/70) e é um timestamp unix padrão.fonte
No Linux,
parece me dar o que eu preciso. A postagem acima é ímpar.
/proc/uptime
não contém um valor de data - teria que ser subtraído da hora atual. Talvez ele quis dizer:fonte
uptime -s
fornece um valor de dataSob Bash, sem tubos ou outros processos; apenas texto:
(Apenas reutilizei a
REPLY
variável padrão, mas você pode escolher o que precisar)fonte
Isso parece robusto e fornecerá a você no formato UTC e ISO8601. (Remova as duas últimas opções para desativar, respectivamente):
fonte
(mais uma maneira de fazer isso, que é útil em determinadas circunstâncias)
fonte
Comando:
Resultado:
fonte
Clara e concisa com o comando tuptime :
fonte