获取今天系统已使用的总时间 - 以分钟为单位

获取今天系统已使用的总时间 - 以分钟为单位

我想设置一个每日限制,限制我的计算机一天可以运行多长时间。为此,我正在编写一个 cron 脚本,该脚本将在达到某些里程碑时采取适当的操作(时间用完时显示警报;时间到时关闭计算机)。

我正在努力解决的部分是获得一天的总正常运行时间(以分钟为单位)。我看过这个正常运行时间脚本,但我觉得使用最后的最简单。

$ last -s today

给了我类似的东西:

user     tty1                          Sat Jul 22 14:09   still logged in
user     tty1                          Sat Jul 22 11:50 - down   (01:56)

我目前正在尝试将括号中的小时转换为分钟,并将“仍然登录”会话转换为分钟。它可以工作,但我觉得所有这些选项都有点复杂。

是否有更简单的方法可以在几分钟内获得总正常运行时间(不包括挂起/睡眠),或者我应该为这些类型的输出找到解决方法?

答案1

在 shell 上执行此命令,以获取uptime当前会话的总分钟数:

echo "Total uptime today (minutes): $(( ($(date +%s) - $(date -d "$(uptime -s)" +%s)) / 60 ))"

awk使用和执行此操作/proc/uptime

awk '{print "Total uptime for the machine (minutes):", int($1 / 60)}' /proc/uptime

更新:

前两个命令仅显示当前会话的运行时间。

我现在已经在一个小的 bash 脚本中实现了它,结合last/proc/uptime.也许你可以通过 shell 的一行代码来实现它。

#!/bin/bash

sessions_uptime=$(last | grep "$(date '+%b %d')" | grep 'reboot' | grep -v 'still running' | awk '{print $NF}' | tr -d '()' | awk -F: '{sum_minutes+=$1*60+$2} END {print sum_minutes}')
current_time=$(awk '{print int($1 / 60)}' /proc/uptime)

total_uptime=$((sessions_uptime + current_time))
echo "TOTAL CURRENT RUNTIME OF THE DAY: ${total_uptime}"

sessions_uptime

  • 过滤掉除 之外reboots的所有内容,并计算当天所有会话的时间(以分钟为单位)。laststill running

current_time

  • 计算会话的当前运行时间。

total_uptime

  • 输出两个值的总和,即当天的总正常运行时间,包括当前会话。我已经在 Debian 11.7 上执行了这个;我不能说它是否适用于所有系统。

更新2:

#!/bin/bash

get_minutes() {
  local h=${1%%:*}
  local m=${1#*:}
  echo $((10#$h * 60 + 10#$m))
}

sessions_uptime=$(last | grep "$(date '+%b %d')" | grep -E 'reboot|suspended' | grep -v 'still running' | awk '{print $NF}' | tr -d '()' | awk -F: '{sum_minutes+=$1*60+$2} END {print sum_minutes}')

current_uptime_seconds=$(awk '{print int($1)}' /proc/uptime)

total_uptime=$((sessions_uptime + current_uptime_seconds / 60))
echo "TOTAL CURRENT RUNTIME OF THE DAY: ${total_uptime} minutes"

确定需要考虑哪些可能发生的情况,并在方法合适的情况下调整脚本。

我在互联网上找到了这些状态消息last,但我无法确认它们是否全部准确。

重启

系统已正常重启

“关闭”

系统已正常关闭

“暂停”

系统已进入挂起或休眠模式

“恢复”

系统已从挂起或休眠模式恢复

“碰撞”

系统因错误或崩溃而重新启动

“向下”

系统已关闭,也可能由于电源故障或硬件问题而发生

“消失了 - 没有注销”

当用户没有正确注销而突然终止连接时可以显示

相关内容