使用Python监控Mac一天的运行(上)

前言

一不小心写成上下两篇了.真是有些过意不去.毕竟,写的太多就少了一部分读者(少了一部分赞额).

之所以拆成上下两篇,主要是因为在研究的过程中越发感到在一篇中强行植入那么多的东西,自己的文章结构组织起来有些困难,对读者来说,也是不容易理解.那倒不如拆分成两部分.

任务分解

我的需求如此简单,统计Mac上面一天的运行情况,然后在每天的下午六点把统计的情况汇总通过Email发送给我.

用更加具体来说,就是,

隔一段时间使用Python脚本,统计当前电脑的运行情况,CPU,内存,硬盘,网络使用状况,然后在每天的下午六点通过Email把统计情况汇总,并且必须要有监控图,并通过Email发送给我的邮箱.

初看这玩意是挺简单的,但是自己动手写了以后就知道,其实还是稍微有些费时间的.

比如:

  • linux下面定时执行一个脚本只需要crontab或者at以下就好了.mac上是是什么?怎么运行一个任务?
  • 统计的数据存哪儿?用什么存?
  • 表格绘图怎么画出来?
  • Email怎么发送,如果要发送好看一点点的Email怎么办?

既然那么多,那就分成两篇,一篇用来介绍Mac上面的定时任务(简单,短文),另一篇用Python来监控Mac电脑,并持久化监控数据,绘图,汇总,发送email.(�稍微复杂一点,带图长文)

  • 上篇讲在Mac上如何让一个脚本定时运行.
  • 下篇讲如何写一个Python监控脚本.

本文结构

  • 前言
  • 本文结构
  • 为什么需要定时任务?
  • Mac上面如何进行定时任务.
  • 疑问和解答
  • 扩展阅读

为什么需要定时任务?

所谓的定时任务,分为两种:

  1. 指定时间执行的程序
  2. 每隔一段时间执行的程序

执行的内容,通常情况下和要做什么事情有关,但是从内容上,分为两种:

  1. 任务之间的数据没有什么关联的
  • 比如,你想去抓一些数据(迅雷会员账号)但是懒得自己动手,于是就写了一个小脚本,放在每天早上的8点钟,去抓来账号.
  1. 任务之间的数据有关联的,甚至某种程度上可以绘制图像.
  • 比如,下一篇要说的使用Python监控自己的电脑情况,e.g:流量.隔一段时间就查看一下自己的电脑运行情况,把情况存下来.甚至,在某个时间点,把结果汇总发给某个人.

Mac上面如何进行定时任务.

  • 首先,你要写一个任务.
  • 其次,让这个任务定时执行.

好,简单的写一个任务get_time.sh.

#!/bin/bash
date >> /Users/twocucao/Downloads/dates.txt

接着加上可执行.

chmod a+x get_time.sh

那么,怎么让Mac通过launchd隔一段时间就执行脚本呢?

创建一个特殊的xml文件叫做com.twocucao.apple.getdates.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>
    <key>Label</key>
    <string>com.twocucao.apple.getdates</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/twocucao/OhMyCode/Bash/get_time.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>10</integer>
</dict>
</plist>

对于这个com.twocucao.apple.getdates随你命名的,保证唯一就好.通常情况下选择反转域名(和Java编程类似),其他的,依照你的脚本位置和间隔时间修改.

拷贝到LaunchDaemons,加载定时工作,然后检查是否加载成功

cp com.twocucao.apple.getdates.plist /Library/LaunchDaemons
launchctl load -w /Library/LaunchDaemons/com.twocucao.apple.getdates.plist
#列出定时任务,并且筛选一下.确认是否加载成功.
launchctl list | grep twocucao

由于这个脚本实在是太弱智了仅仅是为了演示,所以,记得把他给卸载,删除

launchctl unload -w /Library/LaunchDaemons/com.twocucao.apple.getdates.plist
rm /Library/LaunchDaemons/com.twocucao.apple.getdates.plist

疑问和解答

  • 问:为什么要把脚本的配置放在/Library/LaunchAgents呢?
  • 答:当然,你可以拷贝到其他的地方,
    • 如果你的需求是该用户登录时候执行的话,那么拷贝到:~/Library/LaunchAgents,这叫做User Agents.
    • 如果你的需求是该用户登录时候执行的话,那么拷贝到:/Library/LaunchAgents,这叫做Global Agents
    • 如果你的需求是让Root用户或者指定用户登录时候执行的话,那么拷贝到: /Library/LaunchDaemons ,这叫做Global Daemons
    • 如果你的需求是用户登录执行,那么拷贝到: /System/Library/LaunchAgents ,System Agents
    • 如果你的需求是让Root用户或者指定用户登录时候执行的话,那么拷贝到: /System/Library/LaunchDaemons,这叫做System Daemons.

user-agents是级别最低,其他所需权限依次递增.

  • 问:怎么检查任务执行结果?

  • 答:tail -f /Users/twocucao/Downloads/dates.txt

  • 问:如何确定launchd存在这个任务

  • 答: launchctl list

  • 问:既然是隔一段时间就能执行脚本,那么,我可以先用简单的shell脚本,配置好相关执行信息,让他定时执行,接着修改shell脚本执行新的逻辑么?

  • 答:可以.

  • 问:bash命令监控多么方便,为何下一篇要使用Python作为监控工具.

  • 答:shell命令编写代码不直观,编写效率低.Python有很好的第三方库可以使用.

扩展阅读(精选优质资料)

  1. 一个关于Linux命令的各种奇技的网站 http://www.commandlinefu.com/commands/browse
  2. Linux工具快速教程 http://linuxtools-rst.readthedocs.org/zh_CN/latest/index.html
  3. 关于launchd的参考链接,
  1. 命令行的艺术 https://github.com/jlevy/the-art-of-command-line
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容

  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 18,632评论 4 418
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 3,791评论 1 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,907评论 25 707
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,174评论 22 257
  • 这几天伤痕累累。也总觉得时间不够。其实只要想做这件事还不晚。也要更努力来实现我的目标。加油!加油!加油!
    姐是全球限量版L阅读 146评论 0 0