【问题标题】:system loads in GNU screen's hardstatus line系统加载到 GNU 屏幕的 hardstatus 行
【发布时间】:2013-08-26 07:46:11
【问题描述】:

我在我的 Linux 上经常使用屏幕。我想稍微改变一下 hardstatus 行。 我想将 CPU 和内存使用信息添加到该行,但我不知道如何。 在 Google 中进行一些搜索后,我只能找到 %l 选项来添加系统负载。

我的行(复制的)如下所示:

hardstatus alwayslastline '%{= G}[ %{G}%H %{g}][%= %{= w}%?%-Lw%?%{= R}%n*%f %t%?%{= R}(%u)%?%{= w}%+Lw%?%= %{= g}][ %{y}Load: %l %{g}][%{B}%D %d-%    M-%Y %{W}%C:%s %A %{g}]'

我的屏幕 hardstatus 行是这样的:

现在定义广告负载的三个数字是多少? 以及如何将它们更改为 CPU load 28% Mem Load 43% 或类似的东西?

【问题讨论】:

    标签: linux ubuntu gnu-screen


    【解决方案1】:

    为了简短:

    这三个数字分别代表最后一分钟、5 分钟和 15 分钟的平均 CPU 负载,其中 0 表示 0% 负载,1.0 表示 100% 负载。

    看看这个excellent explanation的cpu负载。

    对于第二个问题,我不确定您是否可以在屏幕的 hardstatus 行中用 只有一个 数字来表示系统负载(我不这么认为),但我希望我的回答有点帮助 ;-) *Jost

    【讨论】:

      【解决方案2】:

      如果您从那时起就没有听说过屏幕命令backtick,这可能是您最喜欢的 (http://aperiodic.net/screen/commands:backtick)。

      例如,您可以定义一系列 linux($BASH 或 sh)命令,这些命令会在 backtick 命令中回显您自己计算的负载值和自己计算的内存使用值。

      在此示例中,假设您只想显示“正常运行时间”(5 分钟统计)给出的“平均负载”统计的第二个值。

      第 1 步: 如果您的“正常运行时间”输出如下所示(行首有一个空格,“平均负载:”之前有 2 个空格)...

       17:04:06 up 3 days, 21:52, 12 users,  load average: 0.36, 0.27, 0.21
      

      ...您可以像这样将您的值提取到变量 cpuLoad 中(并去掉尾随的“逗号”):

      cpuLoad=$(cut -s -d\  -f13 <(uptime))
      cpuLoad=${cpuLoad:0:-1}
      

      第 2 步: 同样,您可以从“free”命令的输出中提取您的内存值,并在this 精美文章中解释一些计算,最终将得到一个名为 memLoad 的变量(此处缩写为“memLoad=...”)。

      第 3 步: 将所有内容放在一起,并按照您的意愿回显您的输出:

      backtick 1 5 5 /bin/bash -c 'cpuLoad=$(cut -s -d\  -f13 <(uptime)); cpuLoad=${cpuLoad:0:-1}; memLoad=...; echo "CPU load ${cpuLoad} Mem Load ${memLoad}" '
      

      这将每 5 秒更新一次 hardstatus 或标题状态行中的值,使用“hardstatus 字符串”定义中的转义序列“%1`”。

      要进行更多计算,您将需要更多空间,这些空间必须全部在一行上。所以把它放在一个 shell 函数中,然后从你的 screenrc 文件中调用这个函数:

      backtick 1 5 5 /bin/bash -c '_mySystemLoadScreenFunction'
      

      对我来说不起作用的是使用 $BASH 而不是完整路径。 这不起作用:

      backtick 1 5 5 $BASH -c '_mySystemLoadScreenFunction'
      

      希望,这会有所帮助。 非常感谢您的关注。

      【讨论】:

        【解决方案3】:

        为了扩展@richard-gantz 的答案,这是我从free 中提取内存使用情况的解决方案

        backtick 1 1 1 /bin/bash -c 'cpuLoad=$(cut -s -d\  -f16 <(uptime)); cpuLoad=${cpuLoad:0:-1}; memLoad=$(free -g | grep Mem | awk '\''{print $3"/"$2" GB"}'\''); echo "CPU: ${cpuLoad} Mem: ${memLoad}" '
        
        # Display the status line at the bottom
        hardstatus on
        hardstatus alwayslastline
        hardstatus string "%{.kW}%-w%{.bW}%t [%n]%{-}%+w %= %{..R} %1` %{..G} %H %{..Y} %Y/%m/%d %c"
        

        我使用cut 采用了他的cpuLoad 解决方案,但无法让cut 处理来自free 的多行输出,因此使用grepawk 的解决方案。我在这里发布它,因为我花了一些时间解决这个问题,所以它可能对某人有帮助。

        内存使用量为used_mem / total_mem,以GB为单位。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多