
В настоящее время мой сервер выводит время своей работы на HTML-страницу с помощью:
TIME=$(uptime -p) echo ""${TIME}"!" >> /var/www/html/index.new
Что генерирует вывод:
на 1 день, 1 час, 2 минуты!
Я также хотел бы (ради любопытства) иметь возможность отображать время безотказной работы моей системы, хотя не уверен, как лучше всего это зарегистрировать и отобразить в формате (время безотказной работы -p) [день, час, мин].
Есть ли уже существующий инструмент, который может это сделать? Или мне нужно будет записывать время безотказной работы в файл и вытаскивать наибольшее значение с помощью grep или чего-то подобного?
решение1
После установки «uptimed» я добавил в свой скрипт следующие несколько строк:
uprecords | head -n 4 | tail -n 1 | awk '{print "Current uptime record is " $3,$4$5,$6" (hr:mis:sec)"}'
Текущий рекорд времени безотказной работы — 1 день, 02:05:34 (ч:мин:сек)
Это должно быть более чем подходящим для моих нужд.
решение2
Я бы предложил использовать -s
флаг, чтобы получить анализируемое время запуска системы. А затем использовать date
и вычитание.
Продолжайте делать это в цикле и сравнивайте с записью. Конечно, время записи должно быть сохранено в файле.
(Файл записи необходимо инициализировать. echo 0 > record
)
Пока этот скрипт работает, кто угодно может просто прочитать файл записи, чтобы узнать, какая сейчас запись.
#!/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
решение3
Поскольку вы уже используете uptimed
, вы также можете установитьuprecords-cgi
который представляет информацию, хранящуюся uptimed
на веб-странице; по умолчанию он будет включен вhttp://localhost/cgi-bin/uprecords.cgi.