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?
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.
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.
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.
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.
uptime -s
, who -b
ou de l'analyse /proc/uptime
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
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.
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
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) ))
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)
date -d @$(sed -n '/^btime /s///p' /proc/stat)
(encore une autre façon de le faire, ce qui est utile dans certaines circonstances)
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
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