Linux终端 - 截取top命令并通过电子邮件发送给它

时间:2017-09-09 09:57:30

标签: linux shell terminal screenshot

我在AWS中使用 Ubuntu 14.04 ,它没有任何图形用户界面,我想实现一个自动进程,只要我的CPU发送top命令的屏幕截图去> 70%

有时我们需要发送df -hdu -shhtop等的输出。

我面临的问题是,如何在没有任何GUI的情况下拍摄页面的快照?谁可以帮我这个事?

3 个答案:

答案 0 :(得分:2)

top -n 1 -b > top-output.txt

关于top命令手册页中的选项-b和-n:

    -b  :Batch-mode operation
        Starts top in Batch mode, which could be useful  for  sending
        output  from  top  to  other  programs or to a file.  In this
        mode, top will not accept input and runs until the iterations
        limit  you've  set with the `-n' command-line option or until
        killed.

   -n  :Number-of-iterations limit as:  -n number
        Specifies  the  maximum  number of iterations, or frames, top
        should produce before ending.

<强> UPD
see this link

答案 1 :(得分:1)

不要使用屏幕截图进行监控!

位图图形屏幕截图需要处理大量字节,压缩它们等等,使用它们进行监控是一个不那么好的想法!

即使您阅读包含屏幕截图的邮件,您也无法直接从邮件中读取值...(再次使用具有大量资源的OCR工具)......

第一个样本,CPU负载高时发送邮件

这个小脚本将通过邮件发送top结果,仅当CPU负载超过70%时才使用

这可以由crontab运行,例如。

#!/bin/bash
{
    declare -a out=()
    read; out+=("$REPLY")
    read; out+=("$REPLY")
    read; out+=("$REPLY")
    read foo user foo system foo <<<"$REPLY"
    ((tot=(${user//.}+${system//.}),tot>700))&& {
        tot=000$tot
        printf -v pct "%.1f\n" ${tot:0:${#tot}-1}.${tot:${#tot}-1}
        (
            printf "%s\n" "${out[@]}"
            cat
        ) |
        mail -s "$HOSTNAME's CPU load: $pct tot, $user us, $system sy!" user@host
     }
   }
} < <(top -bn1);

这将读取并存储top命令的3个第一行,计算用户系统百分比的总和,然后如果总数更大超过70%,为邮件主题呈现$pct,然后使用 STDIN 上的top发送3条存储的行和cat命令的其余部分。< / p>

...(语法${user//.}将删除点,然后乘以top命令的10输出... ...

第二个样本,当存储空间已满时发送邮件

#!/bin/bash

{
    read headline
    declare -a over=()
    while read;do
        read filesys size use avail pct mpnt <<<"$REPLY"
        ((${pct%%%}>70)) && over+=("$REPLY")
    done

    ((${#over[@]}>0))&&{
        printf "%s\n" "$headline" "${over[@]}" |
        mail -s "$HOSTNAME: ${#over[@]} disks over limit!" user@host
    }
} < <(LANG=C df -h )

这将发送邮件主题为:&#34; MyHost:N个磁盘超限!&#34; N为磁盘数量,内容输出为{{ 1}}仅适用于 df -h 磁盘,

答案 2 :(得分:0)

其他答案解决了大部分问题。 F.Hauri显示如何检查条件,并在需要时发送邮件。 Tso显示了如何将top输出转储到文件中,可以根据需要发送该文件(根据 F.Hauri&#39> 答案)。

剩下的是什么:

可以将

df -h输出重定向到类似df -h > output1的文件。与du相同, du -h > output2

htop到纯文本:请参阅k0fe's answer to "htop output to human readable file"