web-dev-qa-db-fra.com

Obtenir la date et l'heure du démarrage du système sous Linux

Je sais que uptime imprime l'heure à laquelle une machine est en marche, mais existe-t-il un moyen plus simple (fiable) d'obtenir la date de démarrage que de compter à rebours depuis cette sortie?

J'ai essayé de regarder autour de /proc, mais je n'ai rien trouvé de pertinent. Il y a aussi une ligne comme celle-ci sur ma dmesg:

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

Mais je me demande si cette méthode est agnostique pour la distribution et la version du noyau?

44
jho

J'ai trouvé quelques commandes ici . Essayez who -b ou last reboot | head -1.
who donne des dates numériques, alors que last reboot renvoie des noms abrégés en jours/mois.

37
charlesbridge

Cela interroge le temps de disponibilité du noyau et l'affiche dans le fuseau horaire local:

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

Faites attention aux autres options. La commande last cessera de fonctionner dès que wtmp aura été pivoté. La commande who dépend de la disponibilité et de l'intégrité de utmp. Et /proc/1 pourrait avoir la date actuelle au lieu de la date de démarrage, et pourrait même ne pas être disponible sur un système renforcé. Edit : dmesg ne dispose que d’une mémoire tampon de longueur fixe, elle n’est donc pas réaliste. Les journaux du noyau peuvent être dans /var/log mais la plupart des distributions n'en conservent que 8 semaines.

21
sam hocevar

Je suis tombé sur cette question en cherchant un moyen d'obtenir un temps de démarrage cohérent et analysable , par opposition au temps depuis le démarrage qui change à chaque appel.

Il semble que uptime -s fera l'affaire sur la plupart des systèmes Linux.

15
mikegreiling

J'ai trouvé la ligne btime dans /proc/stat en fouillant un peu

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

et après une recherche rapide, j'ai trouvé cette page: /proc/stat expliqué , qui décrit les "Divers éléments d'information sur l'activité du noyau disponibles dans le fichier /proc/stat ".

La ligne "btime" donne l'heure à laquelle le système a démarré, en secondes depuis l'époque Unix.

10
Oddstr13
  • bon : uptime -s, who -b ou de l'analyse /proc/uptime
  • mauvais : ls -ld /proc/1 et variantes.

N'utilisez pas ls -ld/proc/1 à cette fin. Il est parfois mis à jour après s2disk ou s2ram.

Dans mon cas, who -b a déclaré:

démarrage du système 2 mai 09:51

Alors que ls -ld /proc/1:

dr-xr-xr-x 7 racine racine 0 3 mai 13:09/proc/1

ls -ld pour /proc ou /sys semble persister après la reprise, mais dépend de la mise en œuvre et peut changer à l'avenir. N'utilisez donc pas de telles méthodes. et si votre horloge système est en heure locale, et non en UTC , leur décalage est négatif.

(Je n'ai pas encore le privilège de commenter les réponses, alors j'ai ouvert une nouvelle réponse. Désolé.)

EDIT: uptime -s a été répondu pour la première fois à cette réponse par mikegreiling

7
teika kazura

Le moyen le plus simple est de regarder quand/sbin/init a démarré (c'est toujours le premier processus à démarrer après le chargement du noyau):

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

Je peux donc voir que ma machine a démarré à minuit le 27 mars 2011 à 6 heures.

Si vous souhaitez l'utiliser dans un script, vous pouvez utiliser la commande stat à la place:

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

Le %Y spécifie le temps écoulé depuis la dernière modification du répertoire (heure de création du processus) en secondes depuis l’époque (1/1/70) et correspond à un horodatage Unix standard.

2
Majenko

Cela semble robuste et vous le donnera aux formats UTC et ISO8601. (Supprimez les deux dernières options pour désactiver l'une ou l'autre):

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

Sous Linux,

ls -ld /proc

semble me donner ce dont j'ai besoin. Le post ci-dessus est étrange. /proc/uptime ne contient pas de valeur de date - il faudrait la soustraire de l'heure actuelle. Peut-être qu'il voulait dire:

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

Sous Bash, sans tuyaux ni autres processus; juste du texte:

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

(Vous venez de réutiliser la variable par défaut REPLY, mais vous pouvez choisir ce dont vous avez besoin)

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

(encore une autre façon de le faire, ce qui est utile dans certaines circonstances)

0
AmanicA

Commander:

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

Sortie:

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

Clair et concis avec la commande 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
0
Rfraile