Je sais que uptime
l’imprimante affiche le temps où 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 moi /proc
, mais je n'ai rien trouvé de pertinent. Il y a aussi une ligne comme celle-ci sur mon 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?
unreliable or hard
proposuptime
?uptime
retourne une chaîne du type "up 13 days, 21:01", et vous devrez le compter à partir de cela./proc/uptime
.Réponses:
J'ai trouvé des commandes ici . Essayez
who -b
oulast reboot | head -1
.who
donne des dates numériques, tandis quelast reboot
retourne les noms abrégés de jours / mois.la source
who -b | cut -d' ' -f13
date de retour seulement (-f14 heure de retour)last reboot
ne m'a pas donné la date correcte!who -b
fait.last reboot
m'a donné une date incorrecte aussi, wtmp semblait avoir été tourné le premier jour du moisCela interroge le temps de disponibilité du noyau et l'affiche dans le fuseau horaire local:
Faites attention aux autres options. La
last
commande cessera de fonctionner dès que lawtmp
rotation aura été effectuée. Lawho
commande dépend de la disponibilité et de l'intégrité deutmp
. 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 est donc également irréalisable. Les journaux du noyau peuvent être/var/log
mais la plupart des distributions n'en conservent que 8 semaines.la source
who -b
une minute ou deux de mon système de 210 jours de disponibilité. On dirait que deswho -b
rapports indiquent un horodatage, alors que ce comptage est en quelque sorte affecté par des dérives d'horloge, même si celles-ci sont périodiquement corrigées par une exécutionntpd
.date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u
(qui a l'heure / la date en UTC)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
cela fera l'affaire sur la plupart des systèmes Linux.la source
uptime -s
sorties par exemple2017-08-09 01:23:45
. C'est le mieux, en étant le plus simple. Cette commande est incluse dans le package "procps".uptime
dans CentOS 6 (procps version 3.2.8
) ne semble malheureusement pas supporter cela.uptime -s
ne renvoie pas toujours des résultats constants: superuser.com/q/1247713/71144J'ai trouvé la
btime
ligne en/proc/stat
fouillant un peuet après une recherche rapide, j'ai trouvé cette page: / proc / stat expliqué , qui décrit "diverses informations sur l'activité du noyau disponibles dans le
/proc/stat
fichier".la source
awk '/btime/{print $2}' /proc/stat
uptime -s
,who -b
ou l' analyse syntaxique/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, a
who -b
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
semblent persister après la reprise, mais cela dépend de la mise en œuvre et peut changer à l'avenir, alors n'utilisez 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: a
uptime -s
été répondu pour la première fois dans cette réponse par mikegreilingla source
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):
Je peux donc voir que ma machine a démarré à minuit le 27 mars 2011 à 6 heures.
Si vous voulez l'utiliser dans un script, vous pouvez utiliser la
stat
commande à la place: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.la source
Sous Linux,
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:la source
uptime -s
fournit une valeur de dateSous Bash, sans tuyaux ni autres processus; juste du texte:
(Vous
REPLY
venez de réutiliser la variable par défaut, mais vous pouvez choisir ce dont vous avez besoin)la source
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):
la source
(encore une autre façon de le faire, ce qui est utile dans certaines circonstances)
la source
Commander:
Sortie:
la source
Clair et concis avec la commande tuptime :
la source