Come ottenere in modo affidabile il timestamp in cui è stato avviato il sistema?


13

Sono a conoscenza del uptimecomando, ma restituisce secondi dall'avvio, quindi se sottraggo quel numero dal timestamp corrente, in teoria posso ottenere un risultato diverso se il secondo cambia dopo aver letto il tempo di attività e il timestamp corrente. uptime -sè quello che voglio, ma non è disponibile su centos (come viene calcolato tra?). Posso ottenere solo ctime di / proc dir? Questo sembra darmi il numero giusto, ma mi chiedo se ogni sistema linux abbia / proc creato all'avvio.


Che formato vuoi? HH:MM:SS? Qualcos'altro?
terdon

1
@terdon, timestamp UNIX
Fluffy

Risposte:


12

Prima di tutto, crtimeè complicato su Linux . Detto questo, eseguendo qualcosa di simile

$ stat -c %z /proc/ 
2014-10-30 14:00:03.012000000 +0100

o

$ stat -c %Z /proc/ 
1414674003

è probabilmente esattamente ciò di cui hai bisogno. Il /procfile system è definito dallo standard LFS e dovrebbe essere presente per qualsiasi sistema Linux e per la maggior parte (tutti?) UNIXen.

In alternativa, supponendo che tu non abbia davvero bisogno di secondi di precisione, ma solo che il timestamp sia corretto, puoi usare who:

$ who -b
   system boot  2014-10-30 14:00

Da man who: -b, --boot time dell'ultimo avvio del sistema

Puoi convertirlo in secondi dall'epoca usando GNU date:

$ date -d "$(who -b | awk '{print $4,$3}' | tr - / )" +%s
1414674000

1
Un avvertimento minore è che il tempo di avvio è determinato dall'RTC, o alcuni valori predefiniti se manca un RTC. Questa volta viene scritto in utmp(da init) come voce di "avvio del sistema" e letto da who -b. L'ora di sistema potrebbe essere errata fino all'avvio. who -bsul mio rPi dice che è stato avviato nel 1970 e un altro ARM senza RTC dice il 2008 ;-)
mr.spuratic

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.