
Derzeit lasse ich meinen Server meine Betriebszeit auf einer HTML-Seite ausgeben, und zwar mit:
TIME=$(uptime -p) echo ""${TIME}"!" >> /var/www/html/index.new
Das Ergebnis ist folgende Ausgabe:
bis 1 Tag, 1 Stunde, 2 Minuten!
Ich würde mir (aus Neugier) auch gerne die aufgezeichnete Betriebszeit meines Systems anzeigen lassen, bin mir jedoch nicht sicher, wie ich diese am besten protokollieren und im Format (uptime -p) [Tag, Std., Min] anzeigen kann.
Gibt es ein vorgefertigtes Tool, das dies kann? Oder müsste ich die Betriebszeit in einer Datei protokollieren und den höchsten Wert mit grep oder etwas Ähnlichem herausziehen?
Antwort1
Nach der Installation von „uptimed“ habe ich meinem Skript die folgenden Zeilen hinzugefügt:
uprecords | head -n 4 | tail -n 1 | awk '{print "Current uptime record is " $3,$4$5,$6" (hr:mis:sec)"}'
Der aktuelle Betriebszeitrekord beträgt 1 Tag, 02:05:34 (Std.:Min.:Sek.)
Dies sollte für meine Bedürfnisse mehr als ausreichend sein.
Antwort2
Ich würde vorschlagen, das -s
Flag zu verwenden, um eine analysierbare Zeit für den Systemstart zu erhalten. Und dann date
eine Subtraktion zu verwenden.
Wiederholen Sie diesen Vorgang in einer Schleife und vergleichen Sie ihn mit dem Datensatz. Die Aufzeichnungszeit muss natürlich in einer Datei gespeichert werden.
(Die Datensatzdatei muss initialisiert werden. echo 0 > record
)
Solange dieses Skript ausgeführt wird, kann jeder einfach die Datensatzdatei lesen, um herauszufinden, was der aktuelle Datensatz ist.
#!/bin/sh
format_time ()
{
t=$1
days=$(($t / 86400))
t=$(($t - 86400*$days))
hours=$(($t / 3600))
t=$(($t - 3600*$hours))
minutes=$(($t / 60))
t=$(($t - 60*$minutes))
echo "$days days $hours hours $minutes minutes $t seconds"
}
main ()
{
# Old record
record="$(cat record)"
# When the system started.
boot="$(date -d "$(uptime -s)" '+%s')"
while true; do
# You could also calculate the uptime before the loop and just
# increment it, but that will rely on the script running 24/7.
now="$(date '+%s')"
current_uptime="$(($now - $boot))"
# Set and save the record when it gets beaten
if [ "$current_uptime" -gt "$record" ]; then
record="$current_uptime"
echo "$record" > record
fi
# Status should be printed _after_ potentially having set
# a new record:
clear
echo "Current uptime: $(format_time "$current_uptime")"
echo "Record uptime: $(format_time "$record")"
# Don't waste system resources for silly things.
sleep 1
done
}
main
Antwort3
Da Sie bereits verwenden uptimed
, können Sie auch installierenuprecords-cgi
uptimed
die die in einer Webseite gespeicherten Informationen präsentiert ; standardmäßig ist es aktiviert beihttp://localhost/cgi-bin/uprecords.cgi.