美文网首页树莓派玩转树莓派
树莓派获取运行状态并发送通知(cpu, ram, disk, i

树莓派获取运行状态并发送通知(cpu, ram, disk, i

作者: 洗洗睡吧i | 来源:发表于2020-03-27 16:33 被阅读0次

1.获取运行状态

获取树莓派运行状态用到的命令如下表:

命令 说明
vcgencmd measure_temp 获取CPU温度
top 获取CPU使用率
free 获取RAM使用率
df 获取DISK使用率
ifconfig 获取IP地址
  • 1.1 获取CPU温度:
$ vcgencmd measure_temp
    temp=40.8C   
# 直接返回温度,只要把 temp= 去掉就行
  • 1.2 获取CPU使用率
$ top -bn1
    top - 16:27:28 up 1 day, 18:49,  1 user,  load average: 0.00, 0.00, 0.00
    Tasks: 105 total,   1 running, 104 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  1.4 us,  2.7 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    MiB Mem :    926.1 total,    697.2 free,     51.3 used,    177.6 buff/cache
    MiB Swap:    100.0 total,    100.0 free,      0.0 used.    797.4 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    411 pi        20   0   10188   2804   2500 R   5.9   0.3   0:00.04 top
    ...
    ...
# -bn1 参数: n1指定只运行一次,b输出结果为batch-mode,避免出现乱码
# 可以看到CPU的信息在第3行,只要输出CPU这一行

$ top -bn1 | awk '/Cpu\(s\)/'
    %Cpu(s):  1.4 us,  2.7 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
# 缩写分别是user, system, nice, idle, wait, ...
# 计算CPU使用率等于 1 - idle%
  • 1.3 获取RAM使用率
$ free -m
                total        used        free      shared  buff/cache   available
    Mem:            926          52         696          23         177         796
    Swap:            99           0          99
# -m 参数是指定输出结果以 MB 为单位
# 修改一下命令,只要输出 Mem 这一行

$ free -m | awk '/Mem/'
    Mem:            926          52         696          23         177         796
# 计算RAM使用率等于 (total - available) / total; (仅供参考)
  • 1.4 获取DISK使用率
$ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/root        29G  1.7G   27G   6% /
    devtmpfs        459M     0  459M   0% /dev
    tmpfs           464M     0  464M   0% /dev/shm
    tmpfs           464M   24M  440M   6% /run
    tmpfs           5.0M  4.0K  5.0M   1% /run/lock
    tmpfs           464M     0  464M   0% /sys/fs/cgroup
    /dev/mmcblk0p1  253M   53M  200M  21% /boot
    tmpfs            93M     0   93M   0% /run/user/1000
# -h 参数是指定输出结果人性化,自动选择单位
# 修改一下命令,只要输出 /dev/root 这一行

$ df -h | awk '/root/'
    /dev/root        29G  1.7G   27G   6% /
  • 1.5 获取 IP 地址
$ sudo ifconfig wlan0
    wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.12  netmask 255.255.255.0  broadcast 192.168.1.255
            ...
            ...
# ifconfig 命令要用管理员运行
# wlan0 参数是指wifi网络;如果是有线网络,改为: eth0
# 修改一下命令,只要输出 inet 这一行

$ sudo ifconfig wlan0 | awk '/inet/'
    inet 192.168.1.12  netmask 255.255.255.0  broadcast 192.168.1.255

2. 完整的代码

import os
import requests

# run command
def run_cmd(cmd):
    p = os.popen(cmd).readline().strip().split()
    return p

cpu_temp = run_cmd('vcgencmd measure_temp')
cpu = run_cmd("top -bn1 | awk '/Cpu\(s\)/'")
cpu_usage = 1 - float(cpu[7])/100.0

ram = run_cmd("free -m | awk '/Mem/'")
ram_usage = (int(ram[1]) - int(ram[6])) / float(ram[1])

disk = run_cmd("df -h | awk '/root/'")
ip = run_cmd("sudo ifconfig wlan0 | awk '/inet/'")
print(cpu_temp, cpu, cpu_usage, ram, ram_usage, disk, ip, sep='\n')

###
status = 'Raspi Status: \n'
status += '```\n'
status += 'CPU  Temp  = {}     \n'.format(cpu_temp[0].replace("temp=", ""))
status += 'CPU  Used  = {:.2%} \n'.format(cpu_usage)
status += 'RAM  Total = {}M    \n'.format(ram[1])
status += 'RAM  Used  = {:.2%} \n'.format(ram_usage)
status += 'DISK Total = {}     \n'.format(disk[1])
status += 'DISK Used  = {}     \n'.format(disk[2])
status += 'DISK Perc  = {}     \n'.format(disk[4])
status += 'IP Address = {}     \n'.format(ip[1])
status += '```'
print(status)

# Send to ftqq
key = 'SCUxxxxxxxxxxxxxxx'
api = 'https://sc.ftqq.com/{}.send'.format(key)
send_data = {'text': 'Raspi_Status', 'desp': status}
res = requests.post(api, data=send_data)
print(res.content)

相关文章

网友评论

    本文标题:树莓派获取运行状态并发送通知(cpu, ram, disk, i

    本文链接:https://www.haomeiwen.com/subject/acxruhtx.html