最近购买了m1 pro的中配版mac 前期听说ssd读取有问题 于是在知乎逛一圈 发现有大佬写好的pyplot 于是借用写了一个mac定时任务 来监控自己电脑的ssd情况 大佬🔗点击
1. 准备安装
brew install smartctl
注意:homebrew是需要提前安装的不知道如何安装的可以看我的另一文章 也是看了无数大佬总结的 🔗点击
2. 创建目录编写XXX.sh
#! /bin/zsh
/opt/homebrew/bin/smartctl -a /dev/disk0 >> ~/data/m1ssd/disk.txt
/opt/homebrew/bin/python3 ~/data/m1ssd/ssd.py
注意⚠️:路径大家改自己的 自己的在哪里就改那
创建完成后进行下面的操作
Chomd +x xxx.sh or chomd 777 xxx.sh
3. 编写需要编写的py
from matplotlib import pyplot as plt
import matplotlib.ticker as mticker
from dateutil import parser
import re
import datetime
with open("/Users/coolcorgy/data/m1ssd/disk.txt", "r") as f:
data = f.read()
units = {"B": 1, "KB": 10**3, "MB": 10**6, "GB": 10**9, "TB": 10**12}
def parse_size(size):
number, unit = [string.strip() for string in size.split()]
return int(float(number)*units[unit])
time_str = re.findall("Local Time.*", data)
tb_str = re.findall("Data Units Written.*",data)
time = []
tb = []
for i in time_str:
time.append(parser.parse(i[36:]))
tb = [re.search("\[.*\]",i).group()[1:-1] for i in tb_str]
tb = [parse_size(i)/1e12 for i in tb]
plt.plot(time,tb)
plt.gcf().autofmt_xdate()
plt.xlabel("date")
plt.ylabel("wirtten")
plt.gca().yaxis.set_major_formatter(mticker.FormatStrFormatter('%.2f TB'))
plt.savefig(f'/Users/coolcorgy/data/m1ssd/{datetime.datetime.now().strftime("%Y-%m-%d %H:%M")}.jpg')
注意⚠️:
- 目录写你的 上面的代码需要更改你的路经
- 上面的包需要你提前pip install 具体百度
4. 编写plist
用访达或者命令找到 如下图片的两个文件夹 LaunchAgemts or LaunchDaemons
两个文件的区别是前者需要登陆才能启动定时命令 后者只要开机不登陆也会执行 我用后面的那个报错 于是我就用了前面的
编写cn.corgy.ssd.plist (这是我的大家也可以写自己的名字.plist)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- Label唯一的标识 -->
<key>Label</key>
<string>com.corgy.ssd.plist</string>
<!-- 指定要运行的脚本 -->
<key>ProgramArguments</key>
<array>
<string>/Users/coolcorgy/data/m1ssd/ssd.sh</string>
</array>
<!-- 指定要运行的时间 -->
<!-- <key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>50</integer>
<key>Hour</key>
<integer>14</integer>
</dict> -->
<!-- 制定多久时间执行一次 时间是秒-->
<key>StartInterval</key>
<integer>43200</integer>
<!-- 标准输出文件 -->
<key>StandardOutPath</key>
<string>/Users/coolcorgy/data/m1ssd/log/run.log</string>
<!-- 标准错误输出文件,错误日志 -->
<key>StandardErrorPath</key>
<string>/Users/coolcorgy/data/m1ssd/log/run.err</string>
</dict>
</plist>
具体文件的含义大家可以自己去学一下
注意⚠️:
- 目录需要大家改自己的
- 大家也可以通过定义每天固定的时间来执行
5. 执行命令
# 加载任务, -w选项会将plist文件中无效的key覆盖掉,建议加上
$ launchctl load -w cn.corgy.ssd.plist
# 删除任务
$ launchctl unload -w cn.corgy.ssd.plist
# 查看任务列表, 使用 grep '任务部分名字' 过滤
$ launchctl list | grep 'cn.corgy'
# 开始任务
$ launchctl start cn.corgy.ssd.plist
# 结束任务
$ launchctl stop cn.corgy.ssd.plist