Ottenere la data e l'ora di avvio del sistema in Linux


44

So che uptimestampa il tempo di funzionamento di una macchina, ma esiste un modo più semplice (affidabile) per ottenere la data di avvio rispetto al conto alla rovescia da questo output?

Ho provato a guardarmi intorno /proc, ma non ho trovato nulla di rilevante. C'è anche una linea come questa sul mio dmesg:

[    0.673492] rtc_cmos rtc_cmos: setting system clock to 2011-03-14 14:26:52 UTC (1300112812)

Ma mi chiedo se questo metodo è agnostico per la distribuzione e la versione del kernel?


Di che si unreliable or hardtratta uptime?
Bobby,

2
@Bobby: Nulla sul comando o sulla sua funzione in sé, ma come detto voglio ottenere la data e l'ora dell'ultimo avvio del sistema, non da quanto tempo è rimasto da allora. uptimerestituisce una stringa come "up 13 days, 21:01", e dovresti contarla da quella.
Jho,

4
È banale contare indietro dal valore di uptime. Se vuoi affidabilità , vuoi /proc/uptime.
Sam Hocevar,

Risposte:


40

Ho trovato alcuni comandi qui . Prova who -bo last reboot | head -1.
whofornisce date numeriche, mentre last rebootrestituisce i nomi abbreviati di giorno / mese.


che ne dici se vogliamo solo la data e nient'altro?
T0xicCode

4
who -b | cut -d' ' -f13solo data di ritorno (-f14 tempo di ritorno)
charlesbridge

2
Attenzione: last rebootnon mi ha dato la data corretta! who -bfatto.
qwertzguy,

last rebootmi ha dato anche una data errata, wtmp sembrava essere stato ruotato il primo giorno del mese
golimar

23

Questo interroga il tempo di attività dal kernel e lo visualizza nel fuso orario locale:

date -d "`cut -f1 -d. /proc/uptime` seconds ago"

Fai attenzione alle altre opzioni. Il lastcomando smetterà di funzionare non appena wtmpè stato ruotato. Il whocomando dipende dalla disponibilità e dall'integrità di utmp. E /proc/1potrebbe avere la data corrente invece della data di avvio e potrebbe anche non essere disponibile su un sistema rinforzato. Modifica : dmesgha solo un back buffer di lunghezza fissa, quindi è anche irraggiungibile. I log del kernel potrebbero essere presenti /var/logma la maggior parte delle distribuzioni ne conserva solo 8 settimane.


1
È interessante notare che questo non è d'accordo con who -bun minuto o due sul mio sistema di uptime di 210 giorni. Sembra che who -briporta un timestamp, mentre questo conteggio è in qualche modo influenzato dalle derive dell'orologio, anche se questi vengono periodicamente corretti da una corsa ntpd.
Ruslan,

3
Dopo aver esaminato tutte le risposte alternative, date -d "`cut -f1 -d. /proc/uptime` seconds ago" -uho optato per: (che ha ora / data in UTC)
david6

Risposta fenomenale. Se il kernel non lo sa, nessuno lo sa: è la fonte della verità per il sistema. I secondi facilitano l'esecuzione dei calcoli del tempo (mi sono imbattuto in questo perché voglio sapere "Quale dei miei host non si è riavviato nell'ultimo giorno [86.400 secondi]?")
Mike S

17

Mi sono imbattuto in questa domanda mentre cercavo un modo per ottenere un tempo di avvio coerente e analizzabile , al contrario del tempo dal boot che cambia ad ogni chiamata.

Sembra che uptime -sfarà il trucco sulla maggior parte dei sistemi Linux.


uptime -suscite ad es 2017-08-09 01:23:45. Questo è il migliore, essendo il più semplice. Questo comando è incluso nel pacchetto "procps".
teika kazura,

L' uptimea CentOS 6 ( procps version 3.2.8) non sembra sostenere questo, purtroppo.
mwfearnley,

uptime -snon restituisce sempre risultati costanti: superuser.com/q/1247713/71144
cweiske il

1
Si noti che questo è sempre in localtime , ma in realtà non stampare il fuso orario / Offset. Quindi, se stai cercando di estrarre questo dalle macchine a livello di codice, non è l'ideale, poiché potresti dover determinare separatamente il loro fuso orario, a seconda del tuo caso d'uso. Quindi, suggerirei alcune delle altre risposte.
JJC il

11

Ho trovato la btimeriga /proc/statquando rovistando un po '

cat /proc/stat | grep btime | awk '{ print $2 }'

e dopo una rapida ricerca, ho trovato questa pagina: / proc / stat spiegato , che delinea le "Varie informazioni sull'attività del kernel disponibili nel /proc/statfile".

La linea "btime" indica l'ora in cui il sistema si è avviato, in secondi dall'epoca di Unix.


1
Sembra molto più facile da scrivereawk '/btime/{print $2}' /proc/stat
William Pursell,

@WilliamPursell più semplice è sempre quello che già sai. Non sono un mago strano. : P
Oddstr13,

Buon punto. Tuttavia, hai usato il gatto gratuitamente. Basta grep dal file.
Mike S,

@MikeS corretto - tuttavia, rimango fedele alla mia catena di comando originale come una chiara rappresentazione di dove si trovano le informazioni, anche 7 anni dopo la mia risposta.
Oddstr13,

8
  • buono : uptime -s, who -bo analisi/proc/uptime
  • cattivo : ls -ld /proc/1e varianti.

Non usare ls -ld / proc / 1 per questo scopo. A volte viene aggiornato dopo s2disk o s2ram.

Nel mio caso, ha who -bdetto:

avvio del sistema 2 maggio 09:51

Mentre ls -ld /proc/1:

dr-xr-xr-x 7 root root 0 3 maggio 13:09 / proc / 1

ls -ldperché /proco /syssembra persistere dopo la ripresa, ma dipende dall'implementazione e potrebbe cambiare in futuro, quindi non utilizzare tali metodi. E se l' orologio di sistema è in ora locale, non UTC , hanno un offset negativo.

(Non ho ancora il privilegio di commentare le risposte, quindi ho aperto una nuova risposta. Mi dispiace.)

EDIT: è uptime -sstato risposto per la prima volta in questa risposta da mikegreiling


2

Il modo più semplice è guardare per vedere quando / sbin / init è stato avviato (questo è sempre il primo processo da avviare dopo il caricamento del kernel):

# ls -ld /proc/1
dr-xr-xr-x 7 root root 0 2011-03-27 23:54 /proc/1

Quindi posso vedere che il mio computer si è avviato alle 6 minuti a mezzanotte del 27 marzo 2011.

Se vuoi usarlo negli script puoi invece usare il statcomando:

# stat --printf='%Y' /proc/1
1301266491

I %Yspecifica il tempo dal momento che la directory è stata l'ultima modifica (ora di creazione processo) in secondi da epoca (1/1/70) ed è un timestamp standard UNIX.


1
Sfortunatamente questo non funziona: il mtime su quelle cartelle può cambiare per altri motivi (qui ho un sistema che ha un uptime di 5 giorni e il mtime di / proc / 1 è di 25 minuti fa)
kdt

1
Non è affidabile , come spiegato nella mia risposta
teika kazura,

1

In Linux,

ls -ld /proc

sembra darmi quello di cui ho bisogno. Il post sopra è strano. /proc/uptimenon contiene un valore data - dovrebbe essere sottratto dall'ora corrente. Forse intendeva:

date -d @$(( $(date +%s) - $(cut -f1 -d. /proc/uptime) ))

uptime -sfornisce un valore data
mikegreiling

1

Sotto Bash, senza tubi né altri processi; solo testo:

$ REPLY="$(</proc/uptime)"
$ REPLY="${REPLY%%.*}"
$ echo "$REPLY"
31207

(Ho appena riutilizzato la REPLYvariabile predefinita, ma puoi scegliere quello che ti serve)


Certo, perché no? Kinda uso intelligente della sottostringa variabile. Freddo. +1. Grazie per l'idea!
Mike S,

1

Questo sembra robusto e te lo darà in formato UTC e ISO8601. (Rimuovi le ultime due opzioni per disabilitare, rispettivamente):

date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u -Iseconds

0
date -d @$(sed -n '/^btime /s///p' /proc/stat)

(ancora un altro modo per farlo, che è utile in determinate circostanze)


0

Comando:

(echo ' Currently:' | tr "\n" ' ' ; date +"%Y-%m-%d %k:%M:%S" ; echo '  Up Since:' | tr '\n' ' ' ; uptime -s ; echo '  Duration:' | tr '\n' ' ' ; uptime -p)

Produzione:

 Currently: 2016-05-09  9:06:29
  Up Since: 2016-05-04 12:56:04
  Duration: up 4 days, 20 hours, 10 minutes

0

Cancella e conciso con il comando tuptime :

# tuptime -t
No.             Startup Date                                          Uptime            Shutdown Date   End                    Downtime

1     09:43:39 AM 08/08/2017      41 days, 0 hours, 51 minutes and 2 seconds   10:34:41 AM 09/18/2017    OK                  10 seconds
2     10:34:51 AM 09/18/2017                         1 minute and 16 seconds   10:36:07 AM 09/18/2017    OK                    1 second
3     10:36:08 AM 09/18/2017                       13 minutes and 20 seconds   10:49:28 AM 09/18/2017    OK                   3 seconds
4     10:49:31 AM 09/18/2017       45 days, 0 hours, 1 minute and 20 seconds   09:50:51 AM 11/02/2017    OK                   4 seconds
5     09:50:55 AM 11/02/2017                       27 minutes and 25 seconds   10:18:20 AM 11/02/2017    OK                   4 seconds
6     10:18:24 AM 11/02/2017                                       9 seconds   10:18:33 AM 11/02/2017    OK                   9 seconds
7     10:18:42 AM 11/02/2017      4 days, 5 hours, 41 minutes and 47 seconds   04:00:29 PM 11/06/2017    OK                  44 seconds
8     04:01:13 PM 11/06/2017    15 days, 17 hours, 33 minutes and 48 seconds   09:35:01 AM 11/22/2017   BAD   10 minutes and 40 seconds
9     09:45:41 AM 11/22/2017               8 hours, 9 minutes and 20 seconds   05:55:01 PM 11/22/2017   BAD     7 minutes and 8 seconds
10    06:02:09 PM 11/22/2017                1 hour, 7 minutes and 54 seconds   07:10:03 PM 11/22/2017   BAD   11 minutes and 30 seconds
11    07:21:33 PM 11/22/2017               1 hour, 58 minutes and 32 seconds   09:20:05 PM 11/22/2017    OK                   5 seconds
12    09:20:10 PM 11/22/2017                       14 minutes and 52 seconds   09:35:02 PM 11/22/2017   BAD    5 minutes and 52 seconds
13    09:40:54 PM 11/22/2017                         4 minutes and 6 seconds   09:45:00 PM 11/22/2017   BAD    4 minutes and 51 seconds
14    09:49:51 PM 11/22/2017             11 hours, 15 minutes and 10 seconds   09:05:01 AM 11/23/2017   BAD    7 minutes and 20 seconds
15    09:12:21 AM 11/23/2017      3 days, 2 hours, 17 minutes and 40 seconds   11:30:01 AM 11/26/2017   BAD   27 minutes and 44 seconds
16    11:57:45 AM 11/26/2017   109 days, 19 hours, 12 minutes and 37 seconds   07:10:22 AM 03/16/2018    OK                  17 seconds
17    07:10:39 AM 03/16/2018     25 days, 3 hours, 55 minutes and 59 seconds   12:06:38 PM 04/10/2018    OK                   3 seconds
18    12:06:41 PM 04/10/2018      8 days, 19 hours, 3 minutes and 20 seconds   07:10:01 AM 04/19/2018   BAD    3 minutes and 52 seconds
19    07:13:53 AM 04/19/2018     77 days, 9 hours, 44 minutes and 39 seconds
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.