目前,我的服务器使用以下命令将正常运行时间输出到 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。