Ho uno script che si basa sul tempo in cui Ubuntu 18.04 è stato trovato da:
uptime -s
Salvo quel valore in un file quando eseguo lo script. Ho notato quando ho avviato Ubuntu che il tempo era:
uptime -s
2019-01-07 18:01:59
Dopo aver eseguito per poco più di due ore, lo stesso comando riporta ora un'altra volta (sono rimasto connesso nello stesso account per tutto questo tempo):
uptime -s
2019-01-07 18:01:58
Mi aspetto che il comando venga segnalato contemporaneamente nella stessa sessione di accesso. Ma in qualche modo il tempo cambia con 1 secondo (è prima ora).
Si tratta di un problema con il sistema operativo o lo strumento?
https://elixir.bootlin.com/linux/latest/source/fs/proc/uptime.c
struct timespec64 uptime;
ktime_get_boottime_ts64(&uptime);
Come posso ottenere il tempo di funzionamento del sistema senza tale fluttuazione?
Aggiornare:
Ho pensato di trovare la risposta in: Linux: ottenere la data e l'ora di avvio del sistema
Ma ho sbagliato, solo per fortuna, dopo aver eseguito alcuni altri test, si può vedere che è un problema del sistema operativo, il tempo ruota tra 58 e 59 a seconda dei nanosecondi:
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.670091767
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.627339874
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.708332394
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.821526069
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.604129974
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.469767199
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:59.264900963
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.986611962
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.851955874
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.958194732
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:59.066728481
Sembra che non ci sia tempo di attività del sistema affidabile al secondo livello.